簡體   English   中英

如何為長路徑制作“別名”?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM