我正在做作业,对其中一行有疑问。我不明白这是什么>&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 directory
” stderr
。也称为标准误差用 表示&2
。
不&2
显示消息stdout
。也称为标准输出用 表示&1
。
关于显示消息的更多详细信息&>2
请参见此处:
在您发出的命令中,和的消息stdout
都会stderr
出现在您的终端屏幕上。但是,某些应用程序会将stderr
消息分开并执行特殊处理。
大多数人不愿意重定向echo
错误消息,>&2
但从技术上讲这是正确的做法。
有关 的更多阅读内容stdin
,stdout
以及stderr
从用户或系统管理员的角度来看,请参阅:
从程序员的角度来看 stdin、stdout、stderr 分别是 &0、&1 和 &2,请参见:
答案3
所以if test -d $2
意味着如果 $2(第二个参数)是一个目录,那么
echo "$2: Is directory" >&2
表示打印 $2: 是目录,
并>&2
表示将输出发送到 STDERR,因此它会在控制台上将消息作为错误打印。
您可以从这些参考资料中了解有关 shell 重定向的更多信息: