[英]How to make an “alias” for a long path?
我試圖為shell腳本經常使用的路徑制作一個“別名”。 我試了一下,但失敗了:
myFold="~/Files/Scripts/Main"
cd myFold
bash: cd: myFold: No such file or directory
我如何使其工作?
但是, cd ~/Files/Scripts/Main
工作。
由於它是一個環境變量(別名在bash
有不同的定義),您需要使用以下內容對其進行評估:
cd "${myFold}"
要么:
cp "${myFold}/someFile" /somewhere/else
但實際上我發現它更容易,如果你只想輕松切換到該目錄,創建一個真正的別名(在其中一個bash
啟動文件,如.bashrc
),所以我可以保存擊鍵:
alias myfold='cd ~/Files/Scripts/Main'
然后你可以使用(沒有cd
):
myfold
要刪除定義,請使用unalias
。 以下成績單顯示了所有這些內容:
pax> cd ; pwd ; ls -ald footy
/home/pax
drwxr-xr-x 2 pax pax 4096 Jul 28 11:00 footy
pax> footydir=/home/pax/footy ; cd "$footydir" ; pwd
/home/pax/footy
pax> cd ; pwd
/home/pax
pax> alias footy='cd /home/pax/footy' ; footy ; pwd
/home/pax/footy
pax> unalias footy ; footy
bash: footy: command not found
有一個shell選項cdable_vars
:
cdable_vars
如果設置了此參數,則假定cd
builtin命令不是目錄的參數是變量的名稱,該變量的值是要更改的目錄。
你可以將它添加到你的.bashrc
:
shopt -s cdable_vars
export myFold=$HOME/Files/Scripts/Main
請注意,我用$HOME
替換了代字號; 引號阻止波浪擴展和Bash會抱怨沒有目錄~/Files/Scripts/Main
。
現在你可以使用如下:
cd myFold
不需要$
。 這就是重點,實際上 - 如其他答案所示, cd "$myFold"
在沒有shell選項的情況下工作。 如果myFold
中的路徑包含空格,不需要引號,則cd myFold
也可以工作。
這通常即使有標簽自動完成的工作_cd
在功能bash_completion
檢查cdable_vars
設置-但不是每一個實施做它以同樣的方式,所以你可能不得不源bash_completion
再出現在您.bashrc
(或編輯/etc/profile
,以設置shell選項)。
其他shell有類似的選項,例如Zsh( cdablevars
)。
也許最好使用鏈接
符號或軟鏈接(文件或目錄,更靈活和自我記錄)
# Source Link
ln -s /home/jake/doc/test/2000/something /home/jake/xxx
硬鏈接(僅文件,不太靈活,不能自我記錄)
# Source Link
ln /home/jake/doc/test/2000/something /home/jake/xxx
提示 :如果您不需要在家中看到鏈接,可以用點開始。 ; 然后它會默認隱藏,然后你可以像訪問它一樣
cd ~/.myHiddelLongDirLink
您可以將所需的任何路徑添加到bash的哈希表中:
hash -d <CustomName>=<RealPath>
現在你可以cd ~<CustomName>
。 要使其永久添加到您的bashrc腳本。
請注意,此哈希表旨在為每次執行命令時不需要搜索內容的bash提供緩存,因此將在無效緩存的事件上清除此表,例如修改$PATH
。
首先,你需要$
來訪問“myFold”的值來使問題中的代碼工作:
cd "$myFold"
為了簡化這一點,您可以在~/.bashrc
創建一個別名:
alias cdmain='cd ~/Files/Scripts/Main'
不要忘記一次使用.bashrc
來使別名在當前的bash會話中變得可用:
source ~/.bashrc
現在您可以使用以下命令切換到該文件夾
cdmain
首先,您需要刪除引號:
bashboy@host:~$ myFolder=~/Files/Scripts/Main
引號阻止shell將波形符擴展為其作為$HOME
目錄的特殊含義。
然后你可以使用$myFolder
環境
一個shell變量:
bashboy@host:~$ cd $myFolder
bashboy@host:~/Files/Scripts/Main$
要創建別名 ,您需要定義別名:
alias myfolder="cd $myFolder"
然后,您可以將此類視為命令:
bashboy@host:~$ myFolder
bashboy@host:~/Files/Scripts/Main$
另一種選擇是使用符號鏈接。 即:
ln -s ~/Files/Scripts/Main ~/myFold
之后,您可以對~/myFold
執行操作,例如:
cp some_file.txt ~/myFold
這將把文件放在~/Files/Scripts/Main
。 您可以隨時使用rm ~/myFold
刪除符號鏈接,這將保留原始目錄。
但是也可以使用dir的實際別名
myScripts="~/Files/Scripts/Main"
alias myScripts="cd $myScripts"
這樣您就有了一個通用的命名約定(對於每個目錄/別名對),如果您需要將當前目錄中的某些內容復制到myScripts,則不必考慮它。
IHTH
將以下行放在myscript中
set myFold = '~/Files/Scripts/Main'
在終端使用
source myscript
cd $myFold
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.