所以我在.bashrc文件中有这个bash代码...我正在使用Mac OS X Yosemite
command_not_found_handle ()
{
runcnf=1;
retval=127;
[ ! -S /var/run/dbus/system_bus_socket ] && runcnf=0;
[ ! -x /usr/libexec/packagekitd ] && runcnf=0;
if [ $runcnf -eq 1 ]; then
/usr/libexec/pk-command-not-found $@;
retval=$?;
else
echo "lalalla";
retval=1;
fi;
return $retval
}
我之前在linux环境中使用过这段代码,它运行得很好......每当用户输入一个不存在的bash命令时,它会默认回显“lalalal”.....但是当我在我的Mac OS X Yosemite上使用它,尽管我的.bashrc文件已正确注册(我执行source ~/.bash_profile
而我的.bash_profile包含代码source ~/.bashrc
我的.bashrc中存在的其他命令正在执行....
我做错了什么?当用户输入mac中不存在的命令时,如何让mac使用command_not_found_handle?
@tristan所以我通过brew升级了bash,当我运行bash --version
输出时确认了
GNU bash, version 4.3.30(1)-release (x86_64-apple-darwin14.0.0)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
此外我重做了源.bash_profile
但是当我输入一个不存在的命令时,它仍会显示
-bash: askldfasf: command not found
我做错了什么?
答案 0 :(得分:2)
command_not_found_handle
被引入Bash第4版。
OS X Yosemite默认附带bash-3.2。
为了介绍一些传真,您可以检查每个命令的退出代码以查找退出代码127(“未找到命令”)并在之后追加对该函数的调用。您可以通过检查先前命令的退出代码是127并调用自定义command_not_found_handle
函数(使用$?
和PROMPT_COMMAND)来自行修补此行为。
那就是说,如果我在你的位置,我可能会通过homebrew(brew install bash
或source安装Bash来升级Bash。
e.g。
bash-4.3$ cat not_found.bash
command_not_found_handle()
{
echo ":("
}
bash-4.3$ source not_found.bash
bash-4.3$ a
:(
我测试了你的脚本,因为它目前也在我的机器上:
bash-4.3$ source pillar.bash
bash-4.3$ a
lalalla
以交互方式测试source
- 确保您的脚本在您的计算机上是相同的。