进入文件夹时设置临时 bash 别名

gzi*_*nho 14 shell bash alias

有时,当我进入一个文件夹(可以是一个我习惯于从 CLI 键入大量命令的项目)时,我喜欢使用非常自定义的 bash 别名和键绑定。

让我们假设当我输入像“projectAlpha/”这样的文件夹时,我希望有一些自定义别名,例如:

  • alias doTaskX='./app arg1 arg2...|filter arg1 arg2...'
  • ...

比我想到的更多:

  • 显示显示别名和常用命令的有用消息
  • 为我的项目显示一些常见的自定义键绑定

但是一旦我离开项目的根目录,这些设置就变得不可用。

今天最好的方法是什么?

jim*_*mij 15

Bash 有一个特殊的变量PROMPT_COMMAND,每次执行命令都会执行其中的内容,因此您可以将其设置如下:

PROMPT_COMMAND='[[ "$PWD" = /tmp ]] && { alias ll=ls; echo "Remember: ll=ls"; } || { unalias ll 2>/dev/null; }'
Run Code Online (Sandbox Code Playgroud)

从现在开始,每次您在/tmp目录中时,别名ll都会被创建,而在所有其他目录中,它会被删除。


可能更实用的是在一个函数中收集所有别名和其他内容(例如makealias),并在另一个函数中收集所有取消别名makeunalias,您可以根据需要运行,例如

PROMPT_COMMAND='[[ "$PWD" = /tmp ]] && makealias || makeunalias 2>/dev/null'
Run Code Online (Sandbox Code Playgroud)

请注意,存在 stderr 重定向只是为了防止在这种情况下出现一些无用的警报。