我不太了解计算机如何读取此命令。
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
到somefile
stderr
到与stdout
(somefile
)相同的目的地。在后一种情况下都stderr
和stdout
去somefile
,这可能是你想要的。
cat file1 file2 1> file.txt 2>&1
>&
实际上意味着重复,它使用dup系统调用将新文件描述符映射到已经打开的文件上。
因此,您(实际上是bash)必须先打开新的stdout,然后说:“并将stderr重定向到当前设置的任何stdout”。
&
。您能否附上对该语法的一些引用,或者-更好的是-在上述dup系统上提供一些好的资源?
$
?