【问题标题】:Mac Shell .sh Command not possible [duplicate]Mac Shell .sh 命令不可能[重复]
【发布时间】:2021-05-22 17:39:08
【问题描述】:

是否可以在 Mac 上的 .sh Shell 脚本中执行 where

如果我在终端中执行where,则该命令存在并且有效。

如果我在 .sh 文件中执行 where,则会收到错误:./TestInternal.sh: line 16: where: command not found

我该如何解决/理解这个问题?

【问题讨论】:

  • where 是一个 zsh 主义。使用什么取决于您的脚本使用的 shell。
  • #!/bin/sh吗? #!/usr/bin/env bash?还有什么?
  • (顺便说一句,.sh 不是对文件类型特别有用的描述——不幸的是,很多人把.sh 作为 all 脚本的扩展名,不管怎样解释器是什么;因此,.sh 扩展不仅可以在 POSIX sh 脚本上找到,还可以在 bash 脚本、zsh 脚本、ksh 脚本和许多其他脚本上找到;如果您只有文件,则不知道将使用哪种解释器扩展名:你需要检查shebang线)

标签: bash macos shell sh


【解决方案1】:

我发现wherewhich 的扩展版本。如果我在 .sh 脚本中使用which,它就可以工作。

来源:where command not found os x

【讨论】:

  • which 是一个外部命令,而不是内置的 shell。它无法访问 shell 的一组已定义函数、别名、PATH 缓存等——而且运行起来也很慢(因为它需要启动一个单独的可执行文件)。如果你的 shell 是bash,你可能需要type,或者如果它是sh,你可能需要command -vwhich 几乎总是错的。
  • 那么看来Keith的回答可以改进一下。
  • Keith 的回答确实讨论了type -a,并且确实将其描述为“bash 等价物”。
  • 我在 .sh 脚本中尝试了type,但它似乎不起作用。可能type 的语法与which 的语法不同。
  • 再一次:你的shell使用哪个解释器?不知道它是什么类型的脚本,我无法告诉你正确的用法是什么(你是对的type 确实有 which 没有的语法)。
猜你喜欢
  • 2012-06-06
  • 2012-11-22
  • 1970-01-01
  • 1970-01-01
  • 2017-07-22
  • 1970-01-01
  • 2012-06-21
  • 2022-11-04
相关资源
最近更新 更多