在尝试向相关问题添加更多细节时,我意识到我不知道如何指定要执行的可用 Bash 字类型之一。按help type
字型分为五种:
一个词可能有多种类型(true
只是一个例子;更常见的覆盖词是cd
):
$ type -a true
true is a shell builtin
true is /bin/true
Run Code Online (Sandbox Code Playgroud)
您如何强制执行特定的同义词?到目前为止,按优先顺序:
别名:这是一种特殊情况,因为它优先于所有其他同义词。如果未定义别名,则强制执行此操作仅在命令失败时有用。
$
Run Code Online (Sandbox Code Playgroud)关键词:
$
Run Code Online (Sandbox Code Playgroud)功能:
$
Run Code Online (Sandbox Code Playgroud)内置:
$ builtin true
Run Code Online (Sandbox Code Playgroud)文件:
$ command true
$ $(which true)
$ /bin/true
Run Code Online (Sandbox Code Playgroud)引用一个词不包括别名和关键字。那是,
$ 'true'
Run Code Online (Sandbox Code Playgroud)
将只运行函数、内置函数或文件。
之前我一直对which
不同平台(Linux 与 Solaris vx. OS X)的命令输出差异感到沮丧,不同的 shell 也可能会影响到这个问题。 type
已被建议作为更好的替代方案,但它的便携性如何?
过去,我编写了一些函数来解析which
我遇到的不同用例的输出并处理它们。它们可以在我使用的机器上工作,因此对于我的个人脚本来说还可以,但是对于我要发布给其他人使用的软件来说,这似乎非常不可靠。
举一个可能的例子,假设我必须从脚本中检测 bash 和 zsh 在一台机器上是否可用,然后使用 zsh 运行命令(如果存在),如果 zsh 不存在并且 bash 足够,则使用 bash版本没有特定的错误。脚本的其余大部分可能是 Bourne shell 或 Ruby 或其他任何东西,但是必须使用 zsh 或最新版本的 bash 完成这一特定的事情(AFAIK)。
我可以指望type
跨平台可用吗?是否有其他替代方案which
可以轻松且一致地回答是否安装了特定软件的问题?
(如果你还想给出与我给出的例子特别相关的想法,那很好,但我主要只是询问一般情况:找出特定机器上是否安装了特定东西的最可靠方法是什么? ?)