相关疑难解决方法(0)

如何在别名命令上使用`which`?

像大多数用户一样,我设置了一堆别名来为常用程序提供一组默认标志。例如,

alias vim='vim -X'
alias grep='grep -E'
alias ls='ls -G'
Run Code Online (Sandbox Code Playgroud)

问题是,如果我想用来which查看我的vim/ grep/ ls/etc 来自哪里,别名会妨碍:

$ which vim
vim: aliased to vim -X
Run Code Online (Sandbox Code Playgroud)

这是有用的输出,但不是我在这种情况下要寻找的;我知道vim别名为,vim -X但我想知道 vim来自哪里。

除了暂时取消定义别名以便我可以使用which它之外,是否有一种简单的方法可以which“解开”别名并在其上运行?

编辑:这似乎which是一个 shell-builtin,在不同的 shell 中具有不同的行为。在 Bash 中,SiegeX 对--skip-alias标志的建议有效;但是,我在 Zsh 上。那里是否存在类似的东西?

shell zsh alias which

90
推荐指数
3
解决办法
3万
查看次数

检测(从脚本)是否安装了软件的最佳方法是什么?

之前我一直对which不同平台(Linux 与 Solaris vx. OS X)的命令输出差异感到沮丧,不同的 shell 也可能会影响到这个问题。 type已被建议作为更好的替代方案,但它的便携性如何?

过去,我编写了一些函数来解析which我遇到的不同用例的输出并处理它们。它们可以在我使用的机器上工作,因此对于我的个人脚本来说还可以,但是对于我要发布给其他人使用的软件来说,这似乎非常不可靠。

举一个可能的例子,假设我必须从脚本中检测 bash 和 zsh 在一台机器上是否可用,然后使用 zsh 运行命令(如果存在),如果 zsh 不存在并且 bash 足够,则使用 bash版本没有特定的错误。脚本的其余大部分可能是 Bourne shell 或 Ruby 或其他任何东西,但是必须使用 zsh 或最新版本的 bash 完成这一特定的事情(AFAIK)。

我可以指望type跨平台可用吗?是否有其他替代方案which可以轻松且一致地回答是否安装了特定软件的问题?

(如果你还想给出与我给出的例子特别相关的想法,那很好,但我主要只是询问一般情况:找出特定机器上是否安装了特定东西的最可靠方法是什么? ?)

bash zsh standard which

9
推荐指数
1
解决办法
1963
查看次数

标签 统计

which ×2

zsh ×2

alias ×1

bash ×1

shell ×1

standard ×1