为什么某些脚本使用2>
而不是>>
?
2是>
的乘数吗?
答案 0 :(得分:1)
1 >>和2 >>是特定文件描述符的重定向,在这种情况下为标准输出(文件描述符1)和标准错误(文件描述符2)。 2> 会将脚本中的错误输出到文件。 “ >>” 将命令的输出附加到现有文件。如果文件不存在,它将创建文件,然后将输出添加到文件中。
查看此链接=> https://unix.stackexchange.com/questions/183125/what-does-1-and-2-mean-in-a-bash-script
答案 1 :(得分:0)
对于2>
,表示您将标准错误重定向到文件等。
>>
表示我们正在尝试进行串联操作。
示例:
没有2>
:
ls -ld singh_test
ls: cannot access singh_test: No such file or directory
使用2>
:
ls -ld singh_test 2>/dev/null
答案 2 :(得分:0)
bash中的I / O重定向不是很漂亮,但是非常灵活。
I / O作为“流”运行。标准输入流为0。标准输出为1。错误输出为2。
echo foo
将文字字符串“ foo”发送到命令 standard output 流1。您可以像这样重定向:echo foo 1>x
,它将在流1中发送数据到名为x的文件。对于此类输出重定向,默认输出为标准输出,因此您通常会看到人们忽略了1,例如:echo foo >x
这意味着您可以分别指定命令的标准输出和错误输出的重定向。
ls -ld . bogus >ok 2>err
这会将成功列出的内容定向到ok
中,而将关于bogus
的错误消息引导到err
中。
默认情况下,>
将创建一个文件(如果不存在),但是会默默地截断已经存在的文件。 >>
还将创建一个文件(如果该文件不存在),但是会附加到现有数据中而不是被截断。因此,
ls -ld . bogus >ok 2>>err
将创建一个或两个,但是ok
中的所有先前内容都将丢失,而err
将在文件末尾添加新行。
如果您不希望这种行为,那么set -o noclobber
将对其进行更改,以便>
将创建一个新文件,但是如果该文件已经存在,则将失败。您可以明确告诉它用noclobber
截断>|
下的任何现有文件,以备不时之需。
您还可以使用(例如)2>&-
关闭流,并使用1>&3
创建新的重复项。
有关更完整的参考,请参见here。