
我在 .bash_aliases 檔案中定義了 150 多個捷徑。其中一些是簡單的命令,例如:
# Opens file with default program
o () { xdg-open "$@" & disown; }
# Folder shortcuts
alias ..='cd .. && ls'
其他人正在呼叫我在機器上其他地方的腳本,例如:
alias i3exit='~/.config/i3/i3exit.sh'
還有一些是像o
上面的命令一樣定義的更大的腳本,只有 30-80 行。
直接定義為 bash 函數的腳本與從不同檔案呼叫腳本的別名有什麼不同?其中一種優於另一種嗎?
直覺告訴我,擁有單獨的腳本檔案會更好,但我對此沒有任何論點。
答案1
如果您在~/.bash_aliases
文件中定義這些文件(這是 Ubuntu 特定的內容,並在預設的 Ubuntu 安裝中獲取來源)~/.bashrc
,那麼是的,存在開銷,因為每次啟動新的交互式非登入 shell 時都會獲取該文件。例如,每次開啟一個新的終端視窗時。現在,對於現代機器,這種開銷很可能無法檢測到,但對於舊機器、嵌入式系統或如果您開始使用,這可能是一個問題負載定義的複雜函數。
此外,預設情況下,腳本無法存取以這種方式定義的函數和別名。因此,如果您想在腳本中使用這些函數之一,則需要明確使用 source .bashrc
(或.bash_aliases
)。如果您將它們作為外部腳本檔案放在您的 中$PATH
,則不需要它們。
我個人的經驗法則歸結為所涉及命令的複雜性以及我正在編寫的函數/腳本是否可能對非互動式 shell(例如其他腳本)有用。如果我發現自己編寫了幾十行程式碼,那麼我可能會將其移至腳本中。如果我正在編寫的東西可以在許多不同的上下文中使用,並且在編寫另一個腳本時可能會派上用場,那麼我會再次將其移動到腳本中。
但是,如果我只想要一個簡單的小函數,就像您在問題中所示的函數一樣,只有在交互運行時才真正有用,那麼我將堅持使用函數。因此,這實際上是您個人喜好的問題,並考慮您想要如何以及何時使用您定義的功能。