>&2 在 shell 脚本中是什么意思?

>&2 在 shell 脚本中是什么意思?

我正在做作业,对其中一行有疑问。我不明白这是什么>&2意思:

if test -d $2 
  then echo "$2: Is directory" >&2 ; exit 21
fi

答案1

文件描述符 1 是stdout,文件描述符 2 是stderr

使用>来重定向输出与使用 相同1>。这表示重定向stdout(文件描述符 1)。

通常,我们会重定向到一个文件。但是,我们也可以使用>&重定向到stdout(文件描述符 1)或stderr(文件描述符 2)。

因此,要将stdout(文件描述符 1)重定向到stderr(文件描述符 2),可以使用>&2

了解更多信息:

答案2

它只是向显示消息“ /blah/blah/: Is directorystderr。也称为标准误差用 表示&2

&2显示消息stdout。也称为标准输出用 表示&1

关于显示消息的更多详细信息&>2请参见此处:

在您发出的命令中,和的消息stdout都会stderr出现在您的终端屏幕上。但是,某些应用程序会将stderr消息分开并执行特殊处理。

大多数人不愿意重定向echo错误消息,>&2但从技术上讲这是正确的做法。


有关 的更多阅读内容stdinstdout以及stderr从用户或系统管理员的角度来看,请参阅:

从程序员的角度来看 stdin、stdout、stderr 分别是 &0、&1 和 &2,请参见:

答案3

所以if test -d $2意味着如果 $2(第二个参数)是一个目录,那么

echo "$2: Is directory" >&2 表示打印 $2: 是目录,

>&2表示将输出发送到 STDERR,因此它会在控制台上将消息作为错误打印。


您可以从这些参考资料中了解有关 shell 重定向的更多信息:

相关内容