Bash

作為 bash 別名的路徑僅在父目錄中有效?

  • March 13, 2022

bash 別名可以是路徑嗎?

嗨,對於菜鳥問題提前抱歉。使用 bash 別名時,我注意到一個奇怪的行為。

我的目標

就是為經常使用的路徑使用簡短的 bash 別名,以使在 shell 中的導航更容易。作為一個範例,為了快速導航到uni安裝在數據驅動器上的大學 () 文件夾,/mnt/data我使用了 bash 別名alias uni='/mnt/data/uni'。現在,如果我在父目錄中/mnt/data並執行cd uni,這就像我想的那樣工作,我移動到/mnt/data/uni.

問題

但是,如果我在另一個驅動器上,比如在我的根目錄中並且我執行相同,我會收到錯誤消息bash: cd: uni: No such file or directory。如果我只執行uni,則輸出bash: /mnt/data/uni: Is a directory表明 bash “理解”這是一個目錄。但是,由於某種原因,當不在父目錄中時,別名不能使用 cd 函式移動到該目錄。

如果我將cd命令添加到我的別名中以便它讀取alias uni='cd /mnt/data/uni',則別名適用於所有目錄。但是,我希望只有別名中的路徑才能使用其他功能。現在我可以忍受cd在別名中包含 99% 的操作,因為我對這些目錄所做的操作只是導航,但最讓我煩惱的是,我顯然不完全理解別名在這種情況下是如何工作的。

我的問題

有人可以解釋為什麼我的別名會以這種方式表現以及我在這裡缺少什麼嗎?僅對路徑進行別名的解決方案也很方便。

非常感謝!乾杯

不,別名不能是路徑。或者,更準確地說,它們只能是通向可以執行的東西的路徑。別名作為命令執行,因此alias uni=/bin/ls'會起作用,因為這是指向命令的路徑。但是,alias uni=/mnt/data/uni將不起作用,因為uni它是一個目錄並且無法執行。

當您在其中時它起作用的原因/mnt/data是因為您在那裡有一個名為 的子目錄uni,因此cd uni只需移動到該目錄即可。這裡甚至沒有呼叫別名。這根本不相關。shell 看到的只是一個命令(cd)和一個目標(目錄uni),根本沒有呼叫別名功能。

如果您想像這樣輕鬆訪問目錄,可以將它們設置為變數。將此添加到您的~/.bashrc文件中:

uni="/mnt/data/uni"

保存文件,打開一個新終端,您現在可以從任何地方cd "$uni"移動到/mnt/data/uni

引用自:https://unix.stackexchange.com/questions/694182