מדריך: שורת הפקודה - תגובות
-
כאן ניתן להגיב על מדריך: שורת הפקודה
-
כאן ניתן להגיב על מדריך: שורת הפקודה
@yossiz תותח! איזה בהירות! איזה לב טוב!
-
@yossiz אמר במדריך: שורת הפקודה:
(אזהרה: הדוגמא נכון רק ב-bash, בווינדוס זה לא יעבוד
למה אומר לא יעבוד ?
עובד מצויין גם בווינ -
@משחזר-מידע אמר במדריך: שורת הפקודה - תגובות:
עובד מצויין גם בווינ
ב-bash on windows עובד מצויין, ב-CMD לא עובד.
@משחזר-מידע ערכתי במקור שיהיה יותר ברור איזה חלק לא עובד בווינדוס.
-
@yossiz אמר במדריך: שורת הפקודה:
דרך arguments (תרגום, מישהו?)
אתה יכול להשתמש במינוח פרמטר.
שאפו ענק על המדריך המושקע!
-
כאן ניתן להגיב על מדריך: שורת הפקודה
-
@yossiz
נראה לי שגם & זה תו מיוחד
(לפחות בפקודה START בCMD)
כי שאני מנסה לפתוח כתובת אתר עם משתנים הוא מפסיק כשמגיע ל& -
@yossiz לא בדקתי, אבל אני מניח שחוץ מלקבל את הפרמטרים בצורה רגילה אפשר גם לבדוק את מחרוזת ההרצה. כנראה זה מה שnotepad עושה.
-
@yossiz תמשיך מחכים לזה בכיליון עינים
-
@yossiz תמשיך מחכים לזה בכיליון עינים
@כוספים-למשיח ביקשת - קיבלת
(עכשיו תבקש שהמשיח יבוא במהרה...)
חבר'ה!!! אם משהו לא ברור או אם רוצים הרחבה בפרט מסויים, תשאלו!, (יותר משהעגל וכו'...).
-
שרשור פקודות
עד כאן דיברנו על הרצת פקודות בודדות, עכשיו נסביר קצת על שרשור פקודות בצורות שונות, אבל לפני כן מושג יסוד:
קוד יציאה
אחד מהדרכים שבהם תהליכים מתקשרים עם הסביבה הוא על ידי החזרת "קוד יציאה" בסיום ההרצה. קוד היציאה הוא ערך מספרי. יש מוסכמות שונות במערכות הפעלה שונות לגבי מה מספרים שונים מייצגים ומה הגודל המקסימלי של המספרים. אבל יש משהו אחד ששווה לכל המערכות הפופולאריות וזה שמספר 0 מייצג הצלחה ומספר אחר מייצג כשלון. למה? פשוט כי יש דרך אחד שבו ניתן להצליח ויש מליון דרכים שבהם ניתן להיכשל.
ב-CMD ניתן לקבל את קוד היציאה של הפקודה האחרונה במשתנה
%errorlevel%
. בבאש ניתן לקבלו במשתנה$?
.שרשור בסיסי
ניתן להשתמש בקוד היציאה של תהליך כדי לשרשר תהליכים בצורות שונות.
- הרץ את הפקודה השנייה רק אם הראשונה הצליחה
command1 && command2
- הרץ את הפקודה השנייה רק אם הראשונה לא הצליחה
command1 || command2
קוד היציאה של השרשור הוא קוד היציאה של הפקודה האחרונה בשרשור, ייתכן שההתנהגות של ביטויים לוגיים ב-JS (למי שמכיר) הושפע מה-shell
- הרץ את הפקודה הראשונה ואח"כ את השנייה בכל מקרה
- CMD
command1 & command2
- bash
command1; command2
If
עוד דרך להשתמש בקוד היציאה כדי להשפיע על הפקודות הבאות הוא השימוש בביטוי "if" (=אם).
דוגמאות ב-CMD:
- אם קוד היציאה של
command1
שווה (EQU
) 0 (כלומר הצליחה) הרץcommand2
אחרת הרץcommand3
:
command1 IF %ERRORLEVEL% EQU 0 (command2) ELSE (command3)
- אם קוד היציאה של
command1
הוא בין 10 ל-20 הרץcommand2
:
command1 IF %ERRORLEVEL% GTR 10 ( IF %ERRORLEVEL% LEQ 20 ( command2 ) )
התחביר של CMD הוא פרימיטיבי קשה ומסורבל לעומת bash או powershell. יש אתר מצויין שמתעד אותו: https://ss64.com/nt ניתן ללמוד משם הכל. אבל אין צורך להכיר את כל הפינות של השפה, מספיק להכיר מלמעלה את היכולות ואז לבדוק במקרה הצורך באתר הנ"ל. אני השתמשתי בו עבור הדוגמאות הנ"ל.
דוגמאות ב-bash:
- אם קוד היציאה של
command1
שווה 0 (כלומר הצליחה) הרץcommand2
אחרת הרץcommand3
:
if command1; then command2; else command3; fi
- אם קוד היציאה של
command1
הוא בין 10 ל-20 הרץcommand2
:
command1 if [[ $? -gt 10 && $? -le 20 ]]; then command2; else command3; fi # או if [ $? -gt 10 -a $? -le 20 ]; then command2; else command3; fi # או if [ $? -gt 10 ] && [ $? -le 20 ]; then command2; else command3; fi # או if (( $? > 10 && $? <= 20 )); then command2; else command3; fi
ב-CMD הביטוי
if
בוחן את התוצאה של ביטוי בוליאני (ביטוי שתוצאתה הינו true או false), ב-bash ביטויif
תמיד בוחן קוד יציאה של פקודה. יש לצורך זה כמה פקודות "מיוחדות" כמו]
, [[ ... ]]
, (( ... ))
ו-test
. פקודות אלו מקבלות ביטוי בוליאני ומחזירים קוד יציאה של 0 במידה והתוצאה היא true וקוד יציאה של 1 במידה והתוצאה false.למי שמכיר שפות תכנות: שימו לב, ביטוי
if
ב-bash עובד בדיוק הפוך מבכל שפות התכנות. קוד יציאה של 0 נחשב כהצלחת מבחן ה-if וקוד לא אפסי נחשב ככשלון.בפוסט הבא בעז"ה נרחיב על pipes.
-
@yossiz אמר במדריך: שורת הפקודה:
ייתכן שההתנהגות של ביטויים לוגיים ב-JS למי שמכיר הושפע מה-shell
אתה בטוח? אני חושב שגם בC זה יעבוד ככה, זה כורח המציאות, הרי הביטוי הימני יבוצע בהתאם לאופרטור עם התוצאה של השמאלי, זה הרעיון של short circuit.
@dovid לא הייתי מספיק ברור.
לא התכוונתי להתנהגות ה-short circuiting אלא לזה שהתוצאה של ביטוי לוגי הוא לא ערך בוליאני אלא הערך של הביטוי האחרון שהורץ.(בטבלה הזאת בוויקיפידיה אפשר לראות ש-JS ו-shell הם השפות הכי נפוצות שמתנהגים כך [יש גם את perl lua python ו-ruby. זה ברור לי ש-perl הושפע רבות מתחביר shell] )
ערכתי בפנים
-
@yossiz מיוחד מאד המדריך של הפייפס, אני זוכר שפעם הסתבכתי מאד עם הקטע של הפלט השונה של השגיאות, אני מקווה שאתה הולך להרחיב על זה עוד (על הקטע של > שזה הזרם הרגיל, ו >> שזה הזרם של השגיאות, נראה לי).
בכל מקרה תודה רבה על המדריך המושקע הזה, זה באמת מאד חשוב ולא כ"כ ידוע.
-
@yossiz מיוחד מאד המדריך של הפייפס, אני זוכר שפעם הסתבכתי מאד עם הקטע של הפלט השונה של השגיאות, אני מקווה שאתה הולך להרחיב על זה עוד (על הקטע של > שזה הזרם הרגיל, ו >> שזה הזרם של השגיאות, נראה לי).
בכל מקרה תודה רבה על המדריך המושקע הזה, זה באמת מאד חשוב ולא כ"כ ידוע.
-
@yossiz
אם אתה עוסק בקלט ובפלט, האם אתה תגיע מתי שהוא לאיך עובד הפלט של הGUI
או שזה לא קשור בשום דרך לשורת הפקודה, אז זה כבר מדריך נפרד?