Linux中alias指令的腳本在哪裡?

Linux中alias指令的腳本在哪裡?

我想為 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 下

相關內容