这是什么意思:cd [路径到目录] 2>& 1 1> / dev / null

时间:2014-06-25 11:29:15

标签: unix

请解释: cd [path to dir] 2>&1 1>/dev/null

UNIX BASH shell的内容

以及difference/dev/null 2>&1之间的2>&1 1>/dev/null

2 个答案:

答案 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/nullnull device