我希望完成以下任务:
如果我在bash提示符下执行“cd production”,我应该进入目录并显示一条消息“你正在制作中”,以便用户收到警告。
答案 0 :(得分:8)
不要这样做。 :)
你真正想知道的不是用户是否只是通过cd命令进入'production'目录;你真正想知道的是你是否正在修改生产数据,以及你如何到达那里(cd,pushd,popd,已经从该目录中的父进程打开一个shell)是无关紧要的。
当你在生产目录中时,让你的shell发出令人讨厌的警告更有意义。
function update_prompt() {
if [[ $PWD =~ /production(/|$) ]] ; then
PS1="\u@\h \w [WARNING: PRODUCTION] $"
else
PS1="\u@\h \w $"
fi
}
PROMPT_COMMAND=update_prompt
随意用更丰富多彩的东西替换有问题的琴弦。
答案 1 :(得分:4)
您可以在shell上下文中执行以下操作(例如.bashrc)。
xcd() {
if [[ "$1" == "production" ]] ; then
echo Warning, you are in production.
fi
builtin cd $1
}
alias cd=xcd
这会创建一个函数,然后将cd
命令别名到该函数。函数本身提供警告,然后调用真实的cd
。
然而,更好的解决方案可能是检测真实路径,因为您要求的解决方案会为"cd $HOME ; cd production"
提供误报并为"cd /production/x"
提供误报(如果{{1}确实是危险区域。)
我会做类似的事情:
/production
允许您将顶级危险目录配置为绝对路径。