Shell 脚本在 bash 中有效,但在 ksh 中无效

发布于 2024-12-08 19:16:15 字数 383 浏览 1 评论 0原文

我需要编写一个脚本来测试命令 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

不顾 2024-12-15 19:16:15

我相信命令是可移植的(如果这很重要的话):

command -v -- some_command >/dev/null 2>&1 ||
  printf '%s\n' "not found"  

I believe command is portable (if that matters):

command -v -- some_command >/dev/null 2>&1 ||
  printf '%s\n' "not found"  
ゞ记忆︶ㄣ 2024-12-15 19:16:15

在 bash 中,hash 是一个内置命令。在 ksh 中它是一个别名;别名在 shell 脚本中不活动。

alias hash='alias -t --'

尝试使用 which 命令,它是一个外部命令,因此与 shell 无关:

if ! which -s blablabla; then
    echo not found >&2
fi

In bash hash is a builtin command. In ksh it's an alias; aliases aren't active in shell scripts.

alias hash='alias -t --'

Try the which command, which is an external command and therefore shell-independent:

if ! which -s blablabla; then
    echo not found >&2
fi
Hello爱情风 2024-12-15 19:16:15

hash 命令是 bash 中的 shell 内置命令,但在 ksh 中不是。您可能想使用 whence 来代替。

if ! whence blah; then print urgh; fi  

Tha hash command is a shell built-in command in bash, but not in ksh. You might want to use whence instead.

if ! whence blah; then print urgh; fi  
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文