Bash:目录不存在

时间:2014-11-13 09:29:42

标签: bash shell unix

这个小代码片段做了什么?我确实理解测试命令。我的问题是:>&2是什么意思?

if test ! -d "$1" ; then
echo "Directory does not exist" >&2 ; exit 6
fi

提前致谢!

2 个答案:

答案 0 :(得分:2)

它会将stdout重定向到stderr

当你这样做时:

echo "Directory does not exist"

消息转到标准输出(1)。 >&2将其重定向到标准错误(2)。当您想要分别捕获stdout和stderr时,这非常有用。

例如,如果这是在脚本my_scr.sh中,则将其作为:

运行
bash my_scr.sh > out_file 2> err_file

将确保在err_file中捕获所有错误,并将其他输出转移到out_file

答案 1 :(得分:0)

输出有两种类型,STDOUTSTDERRSTDOUT是默认值,也表示为“1”。 STDERR用'2'表示。

因此,无论何时执行任何命令,如果只想重定向输出,都会重定向而不是错误。

ls > out (or) ls 1>out 

因此ls命令的输出不会重定向到文件输出。

现在我们将尝试打印错误。

lss > out
-bash: lss: command not found

这里输出的是一个错误,无法重定向,因此重定向我们在重定向时使用的错误。

lss 2>out

因此,如果您显示某条消息,则输出内容不会出现在您的脚本中,如果您想将其显示为错误,则需要将输出重定向到错误。

#!/bin/bash
echo "Directory not exist"

./script.sh >out

#!/bin/bash
echo "Directory not exist" >&2

./script.sh >out
Directory not exist

在第二种情况下,即使您将屏幕上打印的信息重定向为错误。

希望这有帮助!