“which”命令输出到变量中不起作用

“which”命令输出到变量中不起作用

我只是 Bash 脚本的初学者。我尝试将命令“which”的输出保存到变量中并打印它,但变量什么也没显示。这是我尝试的代码:

#!/bin/bash
OUTPUT="$(which curl)"
echo "${OUTPUT}"

输出:

user@user:~$ bash new.sh

user@user:~$

当我在终端中运行它时它也有效。

user@user:~$ OUTPUT="$(which curl)"
echo "${OUTPUT}"

curl not found
user@user:~$

但事实是它可以与其他命令一起工作。

#!/bin/bash
OUTPUT="$(date)"
echo "${OUTPUT}"

输出:

user@user:~$ bash new.sh
Sat 07 Aug 2021 01:41:37 PM +0545
user@user:~$

答案1

该变量仅接受通过 STDOUT 或输出流发送的值。由于无法找到 curl,您看到的输出是通过 STDERR 或错误流发送的错误消息。如果您希望在发生错误时将错误消息存储在变量中,请执行以下操作:

OUTPUT="$(which curl 2>&1)"

这会将所有数据从 STDERR 定向到 STDOUT。2 是 STDERR 的文件描述符,1 是 STDOUT 的文件描述符。

相关内容