请解释: cd [path to dir] 2>&1 1>/dev/null
UNIX BASH shell
的内容
以及difference
和/dev/null 2>&1
之间的2>&1 1>/dev/null
答案 0 :(得分:4)
1
是stdout(程序的标准输出),2
是stderr(错误输出)。
2>&1
将所有stderr输出重定向到stdout
1>/dev/null
将所有标准输出重定向到/dev/null
,即变为虚无。
因此错误将显示为输出,标准输出将被抑制。
简单演示:
$ php -r 'fwrite(STDERR, "error"); echo "foo";' 2>&1 1>/dev/null
error
因此,在您的示例中,如果更改到目录成功,则不会发生任何事情,但如果失败,您将错误视为标准输出。由于AFAIK cd
在stdout上没有输出任何内容(如果我错了,请更正我),将stdout重定向到/dev/null
似乎是多余的。
/dev/null 2>&1
这本身并不意味着什么。同样,stderr被重定向到stdout,但/dev/null
在这里做什么取决于它之前的内容。
答案 1 :(得分:1)
RTFM:
3.6.2重定向输出
输出的重定向导致打开名称由word扩展产生的文件,以便在文件描述符n上写入,或者如果未指定n,则打开标准输出(文件描述符1)。如果文件不存在则创建;如果确实存在则将其截断为零大小。
重定向输出的一般格式为:
[N]> [|]字
如果重定向运算符为'>',并且已启用set builtin的noclobber选项,则如果名称由word扩展产生的文件存在且是常规文件,则重定向将失败。如果重定向运算符为“> |”,或者重定向运算符为“>”并且未启用noclobber选项,则即使以word命名的文件存在,也会尝试重定向。
3.6.8复制文件描述符
重定向运算符
[N]<&安培;字
用于复制输入文件描述符。如果word扩展为一个或多个数字,则由n表示的文件描述符将成为该文件描述符的副本。如果单词中的数字未指定打开输入的文件描述符,则会发生重定向错误。如果word求值为' - ',则关闭文件描述符n。如果未指定n,则使用标准输入(文件描述符0)。
运营商
[N]>&安培;字
用于复制输出文件描述符。如果未指定n,则使用标准输出(文件描述符1)。如果单词中的数字未指定打开输出的文件描述符,则会发生重定向错误。作为一种特殊情况,如果省略n,并且word不会扩展为一个或多个数字,则标准输出和标准错误将重定向,如前所述。
请注意,重定向的顺序非常重要。例如,命令
ls> dirlist 2>& 1
将标准输出(文件描述符1)和标准错误(文件描述符2)指向文件dirlist,同时命令
ls 2>& 1> dirlist
仅将标准输出定向到文件dirlist,因为在将标准输出重定向到dirlist之前,标准错误是标准输出的副本。
0
是标准输入。1
是标准输出。2
是标准错误。/dev/null
是null device。