![进入文件夹时设置临时 bash 别名](https://linux22.com/image/8960/%E8%BF%9B%E5%85%A5%E6%96%87%E4%BB%B6%E5%A4%B9%E6%97%B6%E8%AE%BE%E7%BD%AE%E4%B8%B4%E6%97%B6%20bash%20%E5%88%AB%E5%90%8D.png)
有时我喜欢在进入文件夹时使用非常定制的 bash 别名和键绑定(可以是我习惯从 CLI 输入大量命令的项目)。
假设当我输入像“projectAlpha/”这样的文件夹时,我期望一些自定义别名,例如:
alias doTaskX='./app arg1 arg2...|filter arg1 arg2...'
- ...
我想到的还不止这些:
- 显示一条有用的消息,显示别名和常用命令
- 显示我的项目的一些常见自定义键绑定
但是一旦我离开项目的根目录,这些设置就变得不可用。
今天最好的方法是什么?
答案1
Bash 有一个特殊的变量,PROMPT_COMMAND
每次都会执行该变量的内容后命令被执行,所以可以如下设置:
PROMPT_COMMAND='[[ "$PWD" = /tmp ]] && { alias ll=ls; echo "Remember: ll=ls"; } || { unalias ll 2>/dev/null; }'
从现在开始,每次您进入目录时都会创建/tmp
别名,而在所有其他目录中它将被删除。ll
可能更实际的是将所有别名和其他内容收集在一个函数中(例如makealias
),并将所有非别名收集在另一个函数中makeunalias
,您可以根据需要运行该函数,例如
PROMPT_COMMAND='[[ "$PWD" = /tmp ]] && makealias || makeunalias 2>/dev/null'
请注意,stderr 重定向的存在只是为了防止在这种情况下出现一些无用的警报。