Shell 脚本在 bash 中有效,但在 ksh 中无效
我需要编写一个脚本来测试命令 blablabla 是否存在于类路径中。所以我编写了以下代码:
if ! hash blablabla >/dev/null 2>&1; then
echo not found
fi
当脚本在 bash 中执行时,这可以正常工作。但如果我在 KSH 中尝试它,那么它不起作用:
#! /usr/bin/ksh
if ! hash blablabla >/dev/null 2>&1; then
echo not found
fi
我希望执行 echo not found
,但我什么也没得到。有什么问题吗?
I need to write a script to test if the command blablabla exists in the classpath. So I wrote the following code:
if ! hash blablabla >/dev/null 2>&1; then
echo not found
fi
This works fine when the script is executed in the bash. But if I try it in KSH, then it doesn't work:
#! /usr/bin/ksh
if ! hash blablabla >/dev/null 2>&1; then
echo not found
fi
I expect the echo not found
to be executed but instead I get nothing. What's the problem?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我相信命令是可移植的(如果这很重要的话):
I believe command is portable (if that matters):
在 bash 中,
hash
是一个内置命令。在 ksh 中它是一个别名;别名在 shell 脚本中不活动。尝试使用
which
命令,它是一个外部命令,因此与 shell 无关:In bash
hash
is a builtin command. In ksh it's an alias; aliases aren't active in shell scripts.Try the
which
command, which is an external command and therefore shell-independent:hash
命令是bash
中的 shell 内置命令,但在ksh
中不是。您可能想使用whence
来代替。Tha
hash
command is a shell built-in command inbash
, but not inksh
. You might want to usewhence
instead.