为什么目录在2>& 1之前但在2> /之后?

时间:2014-12-03 20:08:08

标签: bash

我一直在四处寻找答案但我找不到答案。我的问题是上述命令的语法。

为什么我需要将目录放在一个目录之前但是在另一个之后呢? 例如:

>~/Desktop/log 2>&1

2>~/Desktop/log

因为当我尝试

2>&1~/Desktop/log 

2>&1>~/Desktop/log

它们不起作用,我没关系。没关系。我只是想知道为什么语法似乎与自己相矛盾。

2 个答案:

答案 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重定向彼此分离。空间很便宜,应该用来避免含糊不清,并让其他人(包括你自己六个月的时间!)更容易阅读和理解。