זוהי הפקודה xargsposix שניתן להריץ בספק האירוח החינמי של OnWorks באמצעות אחת מתחנות העבודה המקוונות המרובות שלנו, כגון Ubuntu Online, Fedora Online, אמולטור מקוון של Windows או אמולטור מקוון של MAC OS
תָכְנִית:
שֵׁם
xargs - בנה רשימות ארגומנטים והפעל את כלי השירות
תַקצִיר
קסארגס [-ptx] [-ה eofstr] [-אני replstr|−L מספר|−נ מספר]
[−ס גודל] [תועלת [טענה...]]
תיאור
השמיים קסארגס כלי השירות יבנה שורת פקודה המורכבת מה- תועלת ו טענה
אופרנדים שצוינו ואחריהם כמה ארגומנטים הנקראים ברצף מקלט סטנדרטי כמו
מתאים לאילוצי האורך והמספר המצוינים באפשרויות. ה קסארגס שירות יהיה
לאחר מכן הפעל את שורת הפקודה שנבנתה והמתן להשלמתה. רצף זה יהיה
לחזור על הפעולה עד להתרחשות אחת מהפעולות הבאות:
* מצב של סוף קובץ מזוהה בקלט סטנדרטי.
* ארגומנט המורכב רק ממחרוזת סוף הקובץ הלוגית (ראה את -ה eofstr
אפשרות) נמצא בקלט רגיל לאחר עיבוד ציטוט כפול,
עיבוד, ו -עיבוד בריחה (ראה הפסקה הבאה). כל הטיעונים למעלה
אך לא כולל את הארגומנט המורכב רק ממחרוזת סוף הקובץ הלוגית
ישמש כארגומנטים בשורות פקודה בנויות.
* הפעלת שורת פקודה בנויה מחזירה סטטוס יציאה של 255.
הבקשה תוודא שהטיעונים בקלט הסטנדרטי מופרדים על ידי
לא מצוטט דמויות, שלא נמלטו תווים, או דמויות. א
מחרוזת של אפס או יותר ללא מרכאות כפולות ('"') תווים ולא- דמויות יכולות
לצטט על ידי ציטוט במירכאות כפולות. מחרוזת של אפס או יותר לא-
('\'') תווים ולא- ניתן לצטט תווים על ידי ציטוטם ב
דמויות. ניתן לחמוק מכל תו ללא ציטוט על ידי הקדמתו עם a
. כלי השירות בשם על ידי תועלת יבוצע פעם אחת או יותר עד
הגיעה לסוף הקובץ או שנמצאה מחרוזת הסוף הלוגית של הקובץ. התוצאות הן
לא צוין אם כלי השירות ששמו על ידי תועלת מנסה לקרוא מהקלט הסטנדרטי שלו.
אורך שורת הפקודה שנוצר יהיה סכום הגודל בבתים של השירות
שם וכל ארגומנט מטופלים כמחרוזות, כולל מסיים בתים null עבור כל אחד מהם
המיתרים האלה. ה קסארגס כלי השירות יגביל את אורך שורת הפקודה כך שכאשר
מופעלת שורת הפקודה, רשימות הארגומנטים והסביבה המשולבות (ראה את Exec משפחה
של פונקציות בנפח ממשקי המערכת של POSIX.1-2008) לא יעלה על
{ARG_MAX}-2048 בתים. במסגרת מגבלה זו, אם גם לא −n וגם לא −ס האפשרות היא
שצוין, אורך שורת הפקודה המוגדר כברירת מחדל יהיה לפחות {LINE_MAX}.
אפשרויות
השמיים קסארגס כלי השירות יתאים לנפח הגדרות הבסיס של POSIX.1-2008, סעיף
12.2, שירות תחביר הנחיות.
האפשרויות הבאות יתמכו:
-ה eofstr השתמש eofstr כמחרוזת סוף הקובץ הלוגית. אם -ה לא מצוין, זה כן
לא צוין אם מחרוזת סוף הקובץ הלוגית היא אופי
('_') או יכולת מחרוזת סוף הקובץ מושבתת. מתי eofstr הוא האפס
string, יכולת מחרוזת סוף הקובץ הלוגית תהיה מושבתת ו
תווים יילקחו מילולית.
-אני replstr
מצב הוספה: תועלת מבוצע עבור כל שורה לוגית מקלט סטנדרטי.
טיעונים בקלט הסטנדרטי יופרדו רק על ידי unescaped
תווים, לא על ידי דמויות. כל לא מצוטט לא נמלט דמויות
בתחילת כל שורה תתעלם. הטיעון המתקבל יהיה
מוכנס פנימה טיעונים במקום כל התרחשות של replstr. לפחות חמישה
טיעונים ב טיעונים כל אחד יכול להכיל מופע אחד או יותר של replstr. כל
מהטיעונים הבנויים הללו אינם יכולים לגדול יותר מאשר יישום מוגדר
מגבלה גדולה או שווה ל-255 בתים. אוֹפְּצִיָה −x ייאלץ.
-ל מספר השמיים תועלת יבוצע עבור כל שאינו ריק מספר שורות טיעונים מ
קלט סטנדרטי. הקריאה האחרונה של תועלת יהיה עם פחות שורות של
טיעונים אם פחות מ מספר לְהִשָׁאֵר. שורה נחשבת כסופה ב-
ראשון אלא אם התו האחרון של השורה הוא א ; נגרר
מסמן המשך לקו הלא ריק הבא, כולל.
−n מספר להפעיל תועלת שימוש בכמה שיותר ארגומנטים סטנדרטיים של קלט, עד מספר
(מספר שלם עשרוני חיובי) ארגומנטים מקסימום. יש להשתמש בפחות טיעונים
אם:
* אורך שורת הפקודה שנצבר חורג מהגודל שצוין על ידי −ס
אפשרות (או {LINE_MAX} אם אין −ס אוֹפְּצִיָה).
* באיטרציה האחרונה יש פחות מ מספר, אבל לא אפס, אופרנדים נשארים.
-עמ' מצב הנחיה: המשתמש נשאל אם לבצע תועלת בכל הזמנה.
מצב מעקב (−ת) מופעל כדי לכתוב את מופע הפקודה שיש לבצע,
ואחריו הודעת שגיאת תקן. תגובה חיובית שנקראה מ
/dev/tty יבצע את הפקודה; אחרת, הקריאה הספציפית של
תועלת ידלג.
−ס גודל להפעיל תועלת שימוש בכמה שיותר ארגומנטים סטנדרטיים של קלט ומניב א
אורך שורת הפקודה פחות מ גודל (מספר שלם עשרוני חיובי) בתים. פחות
יש להשתמש בטיעונים אם:
* המספר הכולל של הארגומנטים עולה על זה שצוין על ידי −n אוֹפְּצִיָה.
* המספר הכולל של השורות עולה על זה שצוין על ידי -ל אוֹפְּצִיָה.
* סוף הקובץ נתקל בקלט רגיל לפני גודל בתים הם
צָבוּר.
ערכים של גודל עד {LINE_MAX} בתים לפחות ייתמכו, בתנאי ש
האילוצים שצוינו ב-DESCRIPTION מתקיימים. זה לא ייחשב
שגיאה אם ערך גדול מזה שנתמך על ידי היישום או
ניתנת חריגה מהאילוצים המפורטים בתיאור; קסארגס ישתמש
הערך הגדול ביותר שהוא תומך במסגרת המגבלות.
−ת הפעל מצב מעקב. כל שורת פקודה שנוצרת תיכתב בתקן
שגיאה ממש לפני הפניה.
−x סיום אם שורת פקודה בנויה לא תתאים למשתמע או שצוין
גודל (ראה את −ס אפשרות למעלה).
אופרנדים
האופרנדים הבאים יהיו נתמכים:
תועלת שם השירות שיש להפעיל, נמצא על ידי נתיב חיפוש באמצעות ה- נתיב
משתנה סביבה, המתואר בכרך הגדרות הבסיס של POSIX.1-2008,
הפרק 8, סביבה משתנים. אם תועלת מושמט, ברירת המחדל תהיה
מה היא הד תוֹעֶלֶת. אם ה תועלת האופרנד נותן שם לכל אחד מהמובנים המיוחדים
שירותים ב סעיף 2.14, מיוחד מובנה תשתיות, התוצאות הן
לא מוגדר.
טענה אפשרות ראשונית או אופרנד להפעלת תועלת.
STDIN
הקלט הסטנדרטי יהיה קובץ טקסט. התוצאות אינן מצוינות אם קובץ קצה
המצב מתגלה מיד לאחר נמלט .
קלט קבצים
הקובץ /dev/tty ישמש לקריאת התגובות הנדרשות על ידי -עמ' אוֹפְּצִיָה.
הסביבה וריאציות
משתני הסביבה הבאים ישפיעו על הביצוע של קסארגס:
שפה ספק ערך ברירת מחדל עבור משתני הבינאום שאינם מוגדרים או
ריק. (ראה את הכרך של הגדרות הבסיס של POSIX.1-2008, סעיף 8.2,
בינאום משתנים בעד הבכורה של בינאום
משתנים המשמשים לקביעת הערכים של קטגוריות מקומיות.)
LC_ALL אם מוגדר לערך מחרוזת לא ריקה, עוקף את הערכים של כל האחרים
משתני בינאום.
LC_COLLATE
קבע את המקום להתנהגות של טווחים, מחלקות שקילות ורב-
רכיבי איסוף תווים המשמשים בביטוי הרגולרי המורחב שהוגדר עבור
מה היא yesexpr מילת מפתח מקומית ב- LC_MESSAGES קטגוריה.
LC_CTYPE קבע את המקום לפרשנות של רצפים של בתים של נתוני טקסט
כתווים (לדוגמה, בייט בודד לעומת תווים מרובי בייטים ב
ארגומנטים וקבצי קלט) וההתנהגות של מחלקות תווים המשמשות ב-
ביטוי רגולרי מורחב שהוגדר עבור yesexpr מילת מפתח מקומית ב-
LC_MESSAGES קטגוריה.
LC_MESSAGES
קבע את המקום המשמש לעיבוד תגובות חיוביות, ואת המקום המשמש
כדי להשפיע על הפורמט והתוכן של הודעות אבחון והנחיות שנכתבו אליהם
שגיאת תקן.
NLSPATH קבע את המיקום של קטלוגי הודעות לעיבוד של LC_MESSAGES.
נתיב קבע את המיקום של תועלת, כמתואר בכרך הגדרות הבסיס
של POSIX.1-2008, הפרק 8, סביבה משתנים.
אסינכרוני אירועים
בְּרִירַת מֶחדָל.
STDOUT
לא בשימוש.
STDERR
השגיאה הסטנדרטית תשמש עבור הודעות אבחון ו- −ת ו -עמ' אפשרויות. אם ה
−ת האפשרות מצוינת, ה תועלת ורשימת הטיעונים הבנויה שלו תיכתב
שגיאת תקן, כפי שהיא תופעל, לפני ההפעלה. אם -עמ' צוין, הנחיה
בפורמט הבא ייכתב (במקום POSIX):
"?..."
בסוף השורה של הפלט מ −ת.
תפוקה קבצים
אין.
מורחבים תיאור
אין.
יְצִיאָה סטָטוּס
יוחזרו ערכי היציאה הבאים:
0 כל הפניות של תועלת החזיר את מצב היציאה אפס.
1-125 לא ניתן היה להרכיב שורת פקודה העומדת בדרישות שצוינו, אחת או
עוד מהפניות של תועלת החזיר סטטוס יציאה שאינו אפס, או משהו אחר
אירעה שגיאה.
126 כלי השירות שצוין על ידי תועלת נמצא אך לא ניתן היה להפעילו.
127 כלי השירות שצוין על ידי תועלת לא ניתן למצוא.
השלכות OF שגיאות
אם לא ניתן להרכיב שורת פקודה העומדת בדרישות שצוינו, כלי השירות
לא ניתן להפעיל, הפעלת השירות מסתיימת על ידי אות, או
הפעלת יציאות השירות עם סטטוס יציאה 255, ה קסארגס שירות יכתוב א
הודעת אבחון ויציאה ללא עיבוד כל קלט שנותר.
השמיים הבא סעיפים יש לו אִינפוֹרמָטִיבִי.
בקשה נוהג
מצב היציאה 255 מאפשר שימוש בכלי שירות על ידי קסארגס לספר קסארגס להפסיק אם זה
לא יודע כי פניות נוספות באמצעות זרם הנתונים הנוכחי יצליחו. לכן, תועלת
צריך במפורש יציאה עם ערך מתאים כדי למנוע חזרה בטעות עם 255.
שים לב שמכיוון שהקלט מנותח כשורות, תווים נפרדים ארגומנטים, ו
, , ותווים במירכאות כפולות משמשים לציטוט, אם קסארגס is
משמש לאגד את הפלט של פקודות כמו למצוא dir -הדפס or ls לתוך פקודות להיות
סביר להניח שתוצאות בלתי צפויות יבוצעו אם שמות קבצים כלשהם מכילים , , או
מצטט דמויות. ניתן לפתור זאת על ידי שימוש ב-find כדי לקרוא לסקריפט שממיר כל אחד מהם
הקובץ נמצא במחרוזת במירכאות שמועברת אליה קסארגס, אבל ברוב המקרים זה כן
עדיף רק לקבל למצוא בצע את צבירת הארגומנטים עצמה באמצעות −exec עם '+'
טרמינטור במקום ';'. שימו לב שכללי הציטוט בהם משתמשים קסארגס אינם זהים ל
בקליפה. הם לא נעשו עקביים כאן כי יישומים קיימים תלויים
הכללים הנוכחיים. שיטה קלה (אך לא יעילה) שניתן להשתמש בה כדי לשנות קלט
המורכב מארגומנט אחד בכל שורה לצורה מצוטטת ש קסארגס מפרש נכון הוא
להקדים כל לא- דמות עם א . חלופות יעילות יותר
מוצגים בדוגמה 2 ובדוגמה 5 להלן.
בהטמעות עם ערך גדול עבור {ARG_MAX}, קסארגס עשוי לייצר שורות פקודה
יותר מ-{LINE_MAX}. עבור הזמנת שירותים, זו לא בעיה. אם קסארגס is
בשימוש ליצירת קובץ טקסט, על המשתמשים להגדיר במפורש את שורת הפקודה המקסימלית
אורך עם ה −ס אוֹפְּצִיָה.
השמיים הפקודה, env, נחמד, nohup, זמן, ו קסארגס צוינו כלי עזר לשימוש ביציאה
קוד 127 אם מתרחשת שגיאה כדי שיישומים יוכלו להבחין בין "כשל במציאת א
כלי השירות'' מתוך ``כלי השירות שהופעל יצא עם ציון שגיאה''. הערך 127 היה
נבחר משום שאינו משמש בדרך כלל למשמעויות אחרות; רוב כלי השירות משתמשים בערכים קטנים
עבור ``תנאי שגיאה רגילים'' והערכים מעל 128 ניתן לבלבל עם סיום
עקב קבלת אות. הערך 126 נבחר באופן דומה כדי לציין זאת
ניתן היה למצוא את כלי השירות, אך לא להפעיל אותו. סקריפטים מסוימים מייצרים שגיאה משמעותית
הודעות המבדילות בין המקרים 126 ל-127. ההבחנה בין קודי יציאה 126 ו
127 מבוסס על תרגול KornShell שמשתמש ב-127 כאשר כל הניסיונות לעשות זאת Exec השירות
להיכשל עם [ENOENT], ומשתמש ב-126 כאשר כל ניסיון לעשות זאת Exec השירות נכשל עבור כל אחד אחר
סיבה.
דוגמאות
1. הפקודה הבאה משלבת את הפלט של הפקודות בסוגריים (מינוס ה
תווים) על שורה אחת, אשר מצורפת לאחר מכן ליומן הקובץ. זה
מניח שהרחבת "$0$*" אינו כולל אף אחד אוֹ
תווים.
(שם יומן; תַאֲרִיך; הדפס "'%s'\n$0 $*") | קסארגס -ה "" >> יומן
2. הפקודה הבאה מפעילה הבדל עם זוגות רצופים של ארגומנטים שהוקלדו במקור
כטיעונים של שורת הפקודה. זה מניח שאין מוטבעים תווים ב
הרכיבים של רשימת הארגומנטים המקורית.
הדפס "%s\n$@" | צמא 's/[^[:alnum:]]/\\&/g' |
קסארגס -ה "" −n 2 −x הבדל
3. בפקודות הבאות, המשתמש נשאל אילו קבצים בספרייה הנוכחית
(לא כולל dotfiles) יש לאחסן בארכיון. הקבצים מאוחסנים בארכיון קשת; a, אחד ב
זמן או b, רבים בו זמנית. הפקודות מניחות שאף שמות קבצים לא מכילים ,
, , , או מרכאות כפולות.
a. ls | קסארגס -ה "" -עמ' -ל 1 ar −ר קשת
ב. ls | xargs −E "" −p −L 1 | xargs −E "" ar −r arch
4. הפקודה הבאה מפעילה פקודה 1 פעם אחת או יותר עם ארגומנטים מרובים,
עצירה אם קריאה של פקודה 1 יש מצב יציאה שאינו אפס.
קסארגס -ה "" sh -ג 'פקודה 1 "$@" || יציאה 255 ' sh < xargs_input
5. במערכות תואמות XSI, הפקודה הבאה מעבירה את כל הקבצים מהספרייה $1 ל
בספרייה $2, ומהדהד כל פקודת תנועה ממש לפני ביצועה. זה מניח שלא
שמות קבצים מכילים דמויות וזה גם לא $1 ולא $2 מכיל את
רצף "{}".
ls -א "$ 1" | צמא -ה 's/"/"\\""/g" -ה 's/.*/"&"/' |
קסארגס -ה "" -אני {} −ת mv "$1"/{} "$2"/{}
Rationalale
השמיים קסארגס כלי השירות נמצא בדרך כלל רק במערכות מבוססות מערכת V; מערכות BSD כלולות
an להגיש מועמדות כלי שירות שסיפק פונקציונליות דומה ל קסארגס −n מספר. רשימות SVID
קסארגס בתור הרחבה לפיתוח תוכנה. כרך זה של POSIX.1-2008 אינו חולק את
לדעת שהוא משמש רק לפיתוח, ולכן הוא אינו אופציונלי.
היישום הקלאסי של קסארגס השירות נמצא בשילוב עם למצוא שירות ל
להפחית את מספר התהליכים שהושקו על ידי שימוש פשטני של למצוא −exec שילוב.
השמיים קסארגס כלי השירות משמש גם לאכיפת גבול עליון על הזיכרון הנדרש להפעלת א
תהליך. עם הבסיס הזה בחשבון, נפח זה של POSIX.1-2008 בחר רק את המינימום
תכונות נדרשות.
למרות שסטטוס היציאה של 255 הוא בעיקר תאונה של יישומים היסטוריים, זה
מאפשר שימוש בכלי שירות על ידי קסארגס לספר קסארגס להפסיק אם הוא לא יודע יותר
קריאות באמצעות זרם הנתונים הנוכחי יצליחו. כל סטטוס יציאה שאינו אפס מא
השירות נופל לטווח 1-125 כאשר קסארגס יוצאים. אין הצהרה כיצד
קודי מצב יציאה שונים שאינם אפס מצטברים על ידי קסארגס. הערך יכול להיות
התוספת של כל הקודים, הערך הגבוה ביותר שלהם, האחרון שהתקבל או ערך בודד
כגון 1. מכיוון שאף אלגוריתם אינו טוב יותר מהאחרים, ומכיוון שרבים מה
כלי עזר סטנדרטיים אומרים מעט יותר (נייד) מאשר ``עבור/נכשל'', שום אלגוריתם חדש לא היה
בדוי.
כמה אחרים קסארגס אפשרויות הוסרו כי חלופות פשוטות כבר קיימות בפנים
כרך זה של POSIX.1-2008. לדוגמה, ה -י replstr אפשרות יכולה להיות יעילה באותה מידה
מבוצע באמצעות מעטפת ל לוּלָאָה. מאז קסארגס קורא an Exec פונקציה עם כל שורת קלט,
מה היא -י אפשרות בדרך כלל לא מנצלת את יכולות הקיבוץ של קסארגס.
הדרישה ש קסארגס אף פעם לא מייצר שורות פקודה כאלה שהפעלת תועלת is
בתוך 2048 בתים מהפגיעה ב-POSIX Exec הגבלות של {ARG_MAX} נועדו להבטיח
שלכלי השירות שהופעל יש מקום לשנות את משתני הסביבה ואת שורת הפקודה שלו
טיעונים ועדיין להיות מסוגלים להפעיל כלי שירות אחר. שים לב שהמינימום {ARG_MAX}
המותר לפי נפח ממשקי המערכת של POSIX.1-2008 הוא 4096 בתים והמינימום
הערך המותר בנפח זה של POSIX.1-2008 הוא 2048 בתים; לכן, 2048 בתים
ההבדל נראה הגיוני. שים לב, עם זאת, כי קסארגס ייתכן שלעולם לא יוכל להפעיל א
שירות אם הסביבה עברה אליו קסארגס מתקרב לשימוש ב-{ARG_MAX} בתים.
הגרסה של קסארגס נדרש על ידי כרך זה של POSIX.1-2008 נדרש להמתין ל-
השלמת הפקודה שהופעלה לפני הפעלת פקודה אחרת. זה נעשה בגלל
תסריטים היסטוריים באמצעות קסארגס הניח ביצוע רציף. יישומים רוצים
לספק פעולה מקבילה של כלי השירות שהופעלו, מומלץ להוסיף אפשרות
המאפשר קריאה מקבילה, אך עדיין צריך להמתין לסיום כל הילדים
לפני קסארגס מסתיים כרגיל.
השמיים -ה האפשרות הושמטה מתקן ISO POSIX‐2:1993 מתוך אמונה שה- eofstr
אופציה-טיעון הוכר רק כאשר הוא היה על שורה בפני עצמה ולפני ציטוט ו
בוצעו עיבוד escape, וכי עיבוד סוף הקובץ ההגיוני היה רק
מופעל אם א -ה צוינה אפשרות. במקרה כזה, פשוט צמא ניתן להשתמש בסקריפט
לשכפל את -ה פונקציונליות. חקירה נוספת העלתה כי:
*מחרוזת סוף הקובץ הלוגית נבדקה לאחר עיבוד הצעת מחיר ו-escape,
עושה a צמא סקריפט שסיפק פונקציונליות מקבילה הרבה יותר קשה
לכתוב.
* ברירת המחדל הייתה לבצע עיבוד לוגי של סוף קובץ עם an בתור ה
מחרוזת סוף קובץ לוגית.
כדי לתקן אי הבנה זו, ה -ה eofstr האפשרות אומצה מה-X/Open
מדריך ניידות. על המשתמשים לשים לב שהתיאור של ה -ה התאמות אפשרויות
תיעוד היסטורי של -ה אפשרות (שלא אומצה כי לא
תמכו בהנחיות תחביר השירות), על ידי כך שאם eofstr היא מחרוזת האפס,
עיבוד סוף קובץ לוגי מושבת. יישומים היסטוריים של קסארגס למעשה
לא השבית עיבוד לוגי של סוף קובץ; הם טיפלו בטיעון בטל שנמצא ב-
קלט כמחרוזת סוף קובץ לוגית. (אפס מחרוזת ניתן ליצור ארגומנט באמצעות
מרכאות בודדות או כפולות ('' or ""). מכיוון שהתנהגות זו לא תועדה היסטורית,
זה נחשב לבאג.
השמיים -אני, -ל, ו −n האפשרויות הן בלעדיות הדדית. יישומים מסוימים משתמשים באחרון
צוין אם ניתן יותר מאחד בשורת פקודה; יישומים אחרים לטפל
שילובים של האפשרויות בדרכים שונות.
FUTURE כיוונים
אין.
השתמש ב-xargsposix באופן מקוון באמצעות שירותי onworks.net