בחזרה לעתיד
בעבר דיברנו על כך שניתן לשנות את מיקום הנוכחי שלנו במערכת למיקום שהיינו בו לפניו על ידי שימוש ב
במידה וננסה לקחת עוד שלב ולנסות לחזור ל2 תיקיות אחורה נראה שאנו פשוט חוזרים חזרה לתיקייה /tmp שהיא כרגע תפסה את המקום של התיקייה האחרונה שהיינו בה.
בזיש יש תכונה נחמדה שאפשר פשוט לרשום מספר ולפי המספר הוא חוזר למיקום בהיסטוריה.
ננסה לשכפל את ההתנהגות הזאת אצלנו בבאש.
להלן זיש
לבאש יש רעיון שנקרא Directory-Stack, מדובר על מחסנית אליה ניתן לטעון תיקיות כדי לגשת אליהם מאוחר יותר
פקודת pushd
הפקודה מאפשרת לנו לטעון תיקייה אל המחסנית, ברגע שדוחפים תיקייה המיקום שלנו במרחב משתנה לאותה התיקייה והפקודה תחזיר לנו את כל התיקיות שקיימות לה במחסנית
בצורתה הבסיסית פקודת
את פקודת
מה לא סיפרתי לכם? פקודת
בשביל ההתחלה ניקח את פקודת pushd וניצור לה alias ל cd, בכדי לא לקבל את כל הפלט של איך נראית המחסנית כרגע נפנה את הפלט לחור השחור של לינוקס
לחלק השני מה שנשאר לעשות הוא ליצור alias למספרים כך שכל מספר יעבור להיסטוריה שבמחסנית בלי לדחוף ערכים חדשים לסטאק.
אתגר בקצה
לאלו שהגיעו עד לכאן אני משאיר אתגר קטן שנותר לפתור
כרגע המחסנית שלנו תתמלא בכל גישה לתיקייה חדשה, היות ואין לנו טעם בהיסטוריה ארוכה מ 10 מיקומים אחרונים, באיזה מנגנון הייתם משתמשים כדי לרוקן את המיקומים הלא רלוונטים מהמחסנית?
מוזמנים לשלוח בתגובות
#directory_stack
#pushd
#popd
#dirs
#cd
#challenge
@bash_tips
pushd, popd, dirs
רמת קושי: #advancedבעבר דיברנו על כך שניתן לשנות את מיקום הנוכחי שלנו במערכת למיקום שהיינו בו לפניו על ידי שימוש ב
cd -
, הערך של המיקום האחרון שלנו נשמר ועל כן אנו יכולים לחזור אליו אחורהplayer@playground:~$ cd /tmpמקסים זה נהדר בבקשה עוד
player@playground:/tmp$ cd -
/home/player
במידה וננסה לקחת עוד שלב ולנסות לחזור ל2 תיקיות אחורה נראה שאנו פשוט חוזרים חזרה לתיקייה /tmp שהיא כרגע תפסה את המקום של התיקייה האחרונה שהיינו בה.
בזיש יש תכונה נחמדה שאפשר פשוט לרשום מספר ולפי המספר הוא חוזר למיקום בהיסטוריה.
ננסה לשכפל את ההתנהגות הזאת אצלנו בבאש.
להלן זיש
▷ /tmp $ cd testזה הזמן להכיר את שלושת החברים
▷ /tmp/test $ cd dir1
▷ /tmp/test/dir1 $ cd ../dir2
▷ /tmp/test/dir2 $ cd ../dir3
▷ /tmp/test/dir3 $ cd ../dir4
▷ /tmp/test/dir4 $ 1
/tmp/test/dir3
▷ /tmp/test/dir3 $ 3
/tmp/test/dir1
▷ /tmp/test/dir1 $ 4
/tmp/test
pushd
, popd
, dirs
נערוך הכרות קלה מה תפקידו של כל אחד ואיך הוא עוזר לנו.לבאש יש רעיון שנקרא Directory-Stack, מדובר על מחסנית אליה ניתן לטעון תיקיות כדי לגשת אליהם מאוחר יותר
פקודת pushd
הפקודה מאפשרת לנו לטעון תיקייה אל המחסנית, ברגע שדוחפים תיקייה המיקום שלנו במרחב משתנה לאותה התיקייה והפקודה תחזיר לנו את כל התיקיות שקיימות לה במחסנית
player@playground:/tmp/test$ pushd dir1
/tmp/test/dir1 /tmp/test
player@playground:/tmp/test/dir1$ pushd ../dir2
/tmp/test/dir2 /tmp/test/dir1 /tmp/test
player@playground:/tmp/test/dir2$ pushd ../dir3
/tmp/test/dir3 /tmp/test/dir2 /tmp/test/dir1 /tmp/test
ניתן לראות את כל רשימת התיקיות בסטאק על ידי שימוש ב פקודת dirs
, כמו שרואים מיקום 0 הוא המיקום האחרון בו היינו$ dirs -v
0 /tmp/test/dir3
1 /tmp/test/dir2
2 /tmp/test/dir1
3 /tmp/test
פקודת popdבצורתה הבסיסית פקודת
popd
היא כמו שהיא נשמעת, הפקודה שולפת ערכים שנמצאים במחסנית בצורת LIFO (האחרון שנכנס הראשון שיוצא) וכך משנה את המיקום שלנו על פי הרשימה שבמחסניתplayer@playground:/tmp/test/dir3$ popd
/tmp/test/dir2 /tmp/test/dir1 /tmp/test
player@playground:/tmp/test/dir2$
פקודת dirsאת פקודת
dirs
כבר פגשנו, היא מציגה את רשימת התיקיות שבמחסנית וכן מאפשרת למחוק את המחסנית על ידי דגל -c מה לא סיפרתי לכם? פקודת
pushd
יודעת גם לשנות מיקום בלי להכניס ערך חדש למחסניתplayer@playground:/tmp/test/dir2$ pushd +2
/tmp/test /tmp/test/dir2 /tmp/test/dir1
player@playground:/tmp/test$ dirs -v
0 /tmp/test
1 /tmp/test/dir2
2 /tmp/test/dir1
player@playground:/tmp/test$ pushd +1
/tmp/test/dir2 /tmp/test/dir1 /tmp/test
player@playground:/tmp/test/dir2$
אוקי אז כבר יש לנו רעיון בראש איך זה הולך להיותבשביל ההתחלה ניקח את פקודת pushd וניצור לה alias ל cd, בכדי לא לקבל את כל הפלט של איך נראית המחסנית כרגע נפנה את הפלט לחור השחור של לינוקס
$ alias cd='pushd 1> /dev/null'ונבדוק איך זה עובד
player@playground:/var$ cd /etcיופי נראה שזה עובד נהדר
player@playground:/etc$ cd /var
player@playground:/var$ dirs -v
0 /var
1 /etc
2 /var
3 /var
4 /etc
5 /tmp/test/dir2
6 /tmp/test/dir1
7 /tmp/test
לחלק השני מה שנשאר לעשות הוא ליצור alias למספרים כך שכל מספר יעבור להיסטוריה שבמחסנית בלי לדחוף ערכים חדשים לסטאק.
player@playground:/var$ alias 1="pushd +1 1> /dev/null"זהו עובד נהדר
player@playground:/var$ alias 2="pushd +2 1> /dev/null"
...
player@playground:/var$ 1
player@playground:/var$ 2
player@playground:/tmp/test/dir2$ 3
player@playground:/var$ 4
player@playground:/etc$ 1
player@playground:/tmp/test/dir2$
אתגר בקצה
לאלו שהגיעו עד לכאן אני משאיר אתגר קטן שנותר לפתור
כרגע המחסנית שלנו תתמלא בכל גישה לתיקייה חדשה, היות ואין לנו טעם בהיסטוריה ארוכה מ 10 מיקומים אחרונים, באיזה מנגנון הייתם משתמשים כדי לרוקן את המיקומים הלא רלוונטים מהמחסנית?
מוזמנים לשלוח בתגובות
#directory_stack
#pushd
#popd
#dirs
#cd
#challenge
@bash_tips