我一直在四处寻找答案但我找不到答案。我的问题是上述命令的语法。
为什么我需要将目录放在一个目录之前但是在另一个之后呢? 例如:
>~/Desktop/log 2>&1
2>~/Desktop/log
因为当我尝试
时2>&1~/Desktop/log
或
2>&1>~/Desktop/log
它们不起作用,我没关系。没关系。我只是想知道为什么语法似乎与自己相矛盾。
答案 0 :(得分:3)
你的问题是间距和线条的含义。
>~/Desktop/log 2>&1
表示将标准输出>
重定向到~/Desktop/log
,然后将标准错误2>
重定向到标准输出(文件描述符1,&1
)。< / p>
与2>~/Desktop/log
类似,将标准错误2>
重定向到~/Desktop/log
。
有人说2>&1~/Desktop/log
感到困惑(含糊不清),因为目前还不清楚你的意思是什么。
您也无法将输出重定向到目录,因为它不是写入输出的有效目标。
线路上的重定向顺序很重要,因为它们以从左到右的方式发生。因此>file 2>&1
将标准输出和标准错误重定向到文件,但2>&1 >file
将标准错误重定向到标准输出的位置,然后然后将标准输出重定向到其他位置(将标准错误转到旧址)。
答案 1 :(得分:2)
当我尝试:
: 2>&1/dev/null
我收到了“模糊重定向”错误(来自Bash 4.3.28 - 带有一些自定义补丁)。
如果我用过:
: 2>&1 /dev/null
有一个空格,那么/dev/null
只是:
命令的一个参数(这是一个无操作 - 它便于测试,这就是全部)。 I / O重定向在:
命令的持续时间内将标准错误发送到标准输出。
使用:
: 2>&1>/dev/null
外壳没有发出声响。它将2>&1
视为一个重定向,>/dev/null
视为另一个,并继续生活。
符号:
: 2>/dev/null
: 2> /dev/null
都指定标准错误应该转到/dev/null
。
故事的主要道德:保持I / O重定向彼此分离。空间很便宜,应该用来避免含糊不清,并让其他人(包括你自己六个月的时间!)更容易阅读和理解。