我不太了解计算机如何读取此命令。
cat file1 file2 1> file.txt 2>&1
据我了解,2>&1只需将标准错误重定向到标准输出。
按照这种逻辑,命令对我的读取如下:
连接文件
file1和file2。stdout从此操作发送到file.txt。发送
stderr至stdout。结束?
我不确定计算机在做什么。按照我的逻辑,该命令应为
cat file1 file2 2>&1 > file.txt
但这是不正确的。
我不太了解计算机如何读取此命令。
cat file1 file2 1> file.txt 2>&1
据我了解,2>&1只需将标准错误重定向到标准输出。
按照这种逻辑,命令对我的读取如下:
连接文件file1和file2。
stdout从此操作发送到file.txt。
发送stderr至stdout。
结束?
我不确定计算机在做什么。按照我的逻辑,该命令应为
cat file1 file2 2>&1 > file.txt
但这是不正确的。
Answers:
我发现使用分配更容易。
> 就好像 =& 就好像 $您从开始
1 = /dev/tty
2 = /dev/tty
然后您的第一个示例1> file.txt 2>&1做了
1 = file.txt
2 = $1 # and currently $1 = file.txt
留给你
1 = file.txt
2 = file.txt
如果您以其他方式进行操作,则再次从
1 = /dev/tty
2 = /dev/tty
然后2>&1 > file.txt做
2 = $1 # and currently $1 = /dev/tty
1 = file.txt
所以最终结果是
1 = file.txt
2 = /dev/tty
并且您只重定向了stdout,而不是stderr。
var=$othervar,$在右侧介绍变量名称。在类似的重定向中2>&1,&在右侧引入文件描述符号。我想说的是,您可以将其视为“文件2等于文件1”。(但是有两种类型的等于:<表示“用于阅读”和>表示“用于写作”。)
重定向的顺序很重要,应该从左到右阅读它们。
例如:
command 2>&1 >somefile表示:
stderr(即2)到的当前目的地stdout(此时为终端)。stdout转到somefile。因此,在这种情况下,stderr转到终端,然后stdout转到文件,这可能不是您想要的。
另一方面,command >somefile 2>&1意味着:
stdout到somefilestderr到与stdout(somefile)相同的目的地。在后一种情况下都stderr和stdout去somefile,这可能是你想要的。
cat file1 file2 1> file.txt 2>&1
>& 实际上意味着重复,它使用dup系统调用将新文件描述符映射到已经打开的文件上。
因此,您(实际上是bash)必须先打开新的stdout,然后说:“并将stderr重定向到当前设置的任何stdout”。
&。您能否附上对该语法的一些引用,或者-更好的是-在上述dup系统上提供一些好的资源?
$?