这个小代码片段做了什么?我确实理解测试命令。我的问题是:>&2
是什么意思?
if test ! -d "$1" ; then
echo "Directory does not exist" >&2 ; exit 6
fi
提前致谢!
答案 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)
输出有两种类型,STDOUT
和STDERR
。
STDOUT
是默认值,也表示为“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
在第二种情况下,即使您将屏幕上打印的信息重定向为错误。
希望这有帮助!