Cd dot dot dot

| |
מה אומר? bash, היא אחד הכלים החביבים עלי. את רוב ימי העבודה שלי אני מחלק בין bash לבין emacs. לעיתים אף אני עובד ב- bash מתוך emacs מתוך bash... עם זאת הציק לי דבר מה.

זכרתי שפעם ב- MS-DOS לא עלינו, הייתי מסוגל להשתמש בפקודה chdir עם יותר משתי נקודות כך:

C:\foo\bar\baz\qux\quux> chdir ...
C:\foo\bar\baz> _


בעוד שתי נקודות החזירו אותי ספריה אחת למעלה, שלוש נקודות החזירו אותי שתי ספריות למעלה, ארבע נקודות החזירו אותי שלוש ספריות למעלה, וכו'.

מדוע, שאלתי את נפשי, לא אוכל לעשות אותו דבר ב- bash?

התשובה, כמובן, היא שאוכל גם אוכל לעשות זאת. כל ששיש לעשות הוא:

function mycd () {
   local E="s:\.\.\.:../..:g"
   \cd $(echo $@ | sed -e "$E" -e "$E" -e "$E")
}
alias cd=mycd


ואז:

/foo/bar/baz/qux/quux $ cd  ...
/foo/bar/baz $ _


מה אומר? bash, היא אחד הכלים החביבים עלי.

תודה שקראתם,

אפשרויות לתצוגת תגובות

בחרו באפשרות התצוגה הרצויה, ולחצו על "שמור הגדרות".

הערה קטנה

ככל הזכור לי, בדוס זה היה קיים רק בחלונות 98 (דוס גירסה 7). בXP, למשל, זה שוב איננו.

4Dos

למיטב זכרוני זה היה פיצ'ר של 4Dos המופלא,
כלומר עוד בימי Dos6 או אפילו קודם.

יתכן מאוד שזה קיים ב4DOS

כמעט ולא השתמשתי בו, כך שאינני זוכר, אבל אם מדובר על תכונה זו כפיצ'ר של MS-DOS (סימן רשום וכו'), אז זה בגירסה 7, קרי חלונות 98. בכל מקרה, זה ממש פרט טריויאלי.

עוד תיקון אחד וזה יהיה מושלם

עוד תיקון אחד וזה יהיה מושלם. תוסיף אפשרות לכתוב בלי רווח אחרי הפקודה. :-)

--
תומר

זה יותר קל

$ alias cd..='cd ..'
$ alias cd...='cd ../..'

זה לא מכסה מצבים...

זה לא מכסה מצבים מסובכים יותר, כגון cd .../foo.

--
תומר

זה מעניין.. אין ל...

זה מעניין.. אין לי מושג איך לפתור את זה, כי אני לא מכיר דרך כללית להפנות את כל הקריאות לcd משהו משהו (בלי רווח) לסקריפט בודד. זה פשוט נחשב כחלק מהפקודה. איך תממש tab completion עם זה?

זה באמת עבד בדוס ככה?

dotfiles.org

Nice trick.

Consider submitting it to dotfiles.org.

B

dotfiles.org

לא הכרתי. משאב מעניין.
תודה.
גרסה מעודכנת נמצאת ב־ http://dotfiles.org/~chenlevy/cd_dot_dot_dot.bash