לפעמים אני מריץ משורת הפקודה שורות שלוקחות זמן לביצוע, להוריד קובץ עם wget, לקודד mp3..
והרבה פעמים יש צורך להריץ משהו אחרי שהפקודה הנוכחית תסתיים.
אם זוכרים מראש אפשר להריץ את הפקודות כך:
אבל אז לא היה לי על מה לכתוב – במילים אחרות, בדרך כלל לא זוכרים מראש.
אחת השיטות לעשות את זה היא פשוט לכתוב את הפקודה הבאה ואחריה אנטר, ולהסתמך על התוכנית שלא תעבד את הפקודה, מה שיגרום לה לעבור חזרה למעטפת*.
אני לא אוהב את זה, כי אי אפשר להשתמש ביכולות של המעטפת (השלמת שמות קבצים, הסטוריה) בזמן שתוכנית רצה.
עוד פתרון, הוא לפתוח חלון מעטפת נוסף, ולהריץ שם את הפקודה:
זה גם לא הכי מוצלח, כי זה דורש שננחש כמה זמן יארך הביצוע של הפקודה הנוכחית (במקרה הזה דקה), וזה גם מעצבן לפתוח עוד מעטפת בשביל זה.
יש פתרון אלטרנטיבי:
להקפיא את הפעולה של התוכנית הנוכחית עם ctrl+z, ולכתוב
למשל:
$ wget http://server/file.mp3
…. wget downloads the file
ctrl+z
[1]+ Stopped wget http://server/file.mp3
… wget continue downloading
… lame encodes the file
$
* מעטפת – Shell – bash for example
האמת היא שדווקא בדוגמה שנתת אפשר לעשות && כיוון שאין טעם שתרוץ הפקודה השנייה אם הראשונה לא הצליחה 🙂
צודק, אבל לא רציתי לסבך את הדוגמא.
אני די בטוח שאפשר לדאוג שהפקודה אחרי הfg תרוץ רק אם הפקודה הקודמת חזרה בלי שגיאה, אבל אני צריך לבדוק איך עושים את זה. מה גם שזה יהיה יותר מסובך וזה לא הנקודה.
עדכון:
בדקתי, fg מחזיר את הערך שהתוכנית שהוא הביא לחזית החזירה, מה שאומר שאפשר בקלות לכתוב
fg && lame file.mp3 file2.mp3
וזה עובד כמצופה.