繁体   English   中英

如何将命令“which”的输出存储在bash脚本的变量中?

[英]How to store the output of command “which” in a variable in a bash script?

环境:

Mac OS Catalina 10.15

GNU bash,版本 3.2.57(1)-release (x86_64-apple-darwin19)

问题:

我有一个 bash 脚本。

我尝试测试是否安装了 MacPOrt。

当我运行命令“port -v”时,它会打开 Macport 终端并且我的脚本的其余部分被破坏了。

所以我尝试使用命令“哪个端口”的另一种方法。 它给出了“找不到端口”的输出,但我没有成功地将它存储在一个变量中。 我的变量是空的。

您可以在下面看到我的 bash 脚本执行 2 个命令的源代码:

  1. 第一个给出一个空值。
  2. 如果未安装 Macport,则第二个给出一个值。 但是如果安装了它,它会打开 Macport 终端并破坏我的代码。
OUTPUT=$(which port 2>&1)

echo "OUTPUT is $OUTPUT"

if echo "$OUTPUT" | grep -q "port not found"; then

    echo "MacPort is NOT installed"

else

    echo "MacPort is installed"

fi

echo "======================================================================"

OUTPUT=$(port -v 2>&1)

echo "OUTPUT is $OUTPUT"

if echo "$OUTPUT" | grep -q "command not found"; then

    echo "MacPort is NOT installed"

else

    echo "MacPort is installed"

fi

这是输出:

OUTPUT is 
MacPort is installed
======================================================================
OUTPUT is test.sh: line 11: port: command not found
MacPort is NOT installed

所以似乎“哪个”命令的行为不像其他命令。 如何存储“哪个”命令的输出? 如果不可能,我同意接受任何其他测试 Macport 安装的技巧。

如果您真正要查找的只是检查port命令是否可用,那么在 bash 中执行此操作的正确方法是:

if ! command -v port > /dev/null; then
  echo "MacPort is not installed"
  exit 1
fi

你的脚本有错误:

OUTPUT=$(which port 2>&1)

echo "OUTPUT is $OUTPUT"

if echo "$OUTPUT" | grep -q "port not found"; then
    echo "MacPort is NOT installed"
else
    echo "MacPort is installed"
fi

您正在检查port not command 但是which如果找不到port which命令实际上不会输出任何内容(在不同系统上which输出任何内容都不同)。 这可以在您的输出中看到( OUTPUT为空)。

在任何情况下,您都不能依赖which因为它在某些版本中可能不会输出任何内容,甚至其返回代码在某些旧平台上也不可靠。

更好的方法是使用commandtype内置的 bash(这也避免调用像which的外部命令):

if type port &>/dev/null; then
    echo "MacPort is installed"
else
    echo "MacPort is NOT installed"
fi

if command -v port &>/dev/null; then
    echo "MacPort is installed"
else
    echo "MacPort is NOT installed"
fi

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM