![Linux中alias指令的腳本在哪裡?](https://rvso.com/image/134425/Linux%E4%B8%ADalias%E6%8C%87%E4%BB%A4%E7%9A%84%E8%85%B3%E6%9C%AC%E5%9C%A8%E5%93%AA%E8%A3%A1%EF%BC%9F%20.png)
我想為 bash 別名腳本添加一個參數,以便我可以運行
alias -p l='ls -l'
它將永久添加到我的 .zshrc 中。但我無法找到別名的 shell 腳本。
我嘗試過whereis alias
,但沒有運氣。甚至man alias
顯示別名沒有條目。
我進去看了看,/usr/bin, /usr/share/local/bin
但沒有運氣。誰能指出地點嗎?
編輯:我還嘗試透過以下方式找到所有可能的路徑ls $(echo $PATH| tr ':' '\n') | grep alias
答案1
alias
是一個內建命令,因此它不會在任何文件中顯示為腳本或函數。該type
命令將顯示:
$ type alias
alias is a shell builtin
但您仍然可以覆蓋它。具有相同名稱的函數將屏蔽內建函數,除非使用builtin
內建函數明確呼叫它。
所以,這樣的事情應該要有效:
alias() {
if [ "$1" = "-p" ]; then
echo "-p was given";
shift;
fi;
builtin alias "$@";
}
如果要將相同的別名分配列印到文件,則需要小心地正確引用它,以便它可以用作 shell 的輸入。
shift
像這樣的事情可能會做(添加在函數之後),但請測試它:printf "alias %q\n" "$@" >> ~/my.alias.file
至於 Bash 與 Zsh 的問題,我認為上面的方法對兩者都適用,但我不是 Zsh 的專家。
順便說一句,您可能還想注意 Bashalias
已經有一個-p
選項help alias
:
Options:
-p print all defined aliases in a reusable format
我不知道它是否有任何用處,因為alias
不帶參數的預設行為也是以可重複使用格式列印所有別名。
答案2
您的alias
命令很可能是 shell 內建命令,而不是腳本。您可以使用以下命令進行檢查type
:
user@host:~$ type alias
alias is a shell builtin
要獲取有關alias
內建函數的文檔,您可以查看bash
手冊頁:
man bash
要使別名持久化,您通常會將命令添加到您的 Bash 設定檔之一 - 最有可能是您的~/.bashrc
文件,例如:
user@host:~$ echo "alias l='ls -l'" >> ~/.bashrc
答案3
據我所知,zsh
不支援持久別名。
如果您喜歡持久別名,我建議您檢查一下http://schilytools.sourceforge.net/man/man1/bosh.1.html用於實作具有持久可用性的別名。
對於其他 shell,別名只能作為別名指令寫入相關.*shrc
檔案內。
答案4
我主要使用 bash 並在 .bashrc 中有我的別名。
它位於我的主目錄中 /home/myuser/.bashrc 下