Bash
是否可以在 zsh(或任何其他 shell)中定義目錄敏感別名?
我想根據目前工作目錄使用不同的別名(或者可能:不同的別名)。例如,我可能想
l
用作ls
一些額外選項的簡寫。我想使用兩種變體:alias l="ls --sort=extension" # variant A alias l="ls --quoting-style=literal" # variant B
通常,我想使用變體 A。但是,我想在列出圖片時使用變體 B——也就是說,當我的工作目錄是
~/pictures
. (這只是一個最小的例子。我的實際案例更複雜。)我知道我可以簡單地編寫一個
l()
對$(pwd)
. 但是,我想要一個更強大的解決方案,它允許我重命名特定目錄而不更改任何別名(這不會弄亂我的.zshrc
.但是是否可以覆蓋或添加別名,例如通過在相關目錄中設置 local
.zshrc
(就像 vim 和 local 一樣.vimrc
)?此外,它(也)可以在 bash 或任何其他 shell 中使用嗎?
您可以創建一個函式或腳本來檢查目前目錄中的某些文件並基於此更改行為:
l() { if [ -f ./.ls-literal-quote ] ; then ls --quoting-style=literal "$@" else ls --sort=extension "$@" fi }
類似的東西可以讓您將配置保留在目錄本身中,而不是某個集中位置(如果這是您想要的)。
現在,這需要在涉及的目錄中添加額外的文件,但是您可以通過使用擴展屬性(如果您的系統支持)來解決這個問題。
我正在做一個實現這一目標的項目。檢查一下:localalias。
它允許您創建和使用偽別名和定義它們的目錄的本地函式。也許最好的部分是它無需執行任何冒險的“源”命令即可完成此操作。這些解決方案更簡單、更快捷,但存在很大的安全問題。
這是一個展示: