捕获&&链接的命令的输出/重定向


11

我有一系列与&&链接在一起的命令a,b,c a && b && c

我想捕获所有到stdout和stderr的命令的输出。 a && b && c 2>&1 > capture_file 仅捕获c命令的输出。

Answers:


11
{ a && b && c; } >capture_file 2>&1

注意重定向的顺序:您必须先重定向stdout。


为什么首先要stdout?
TLOlczyk

@TLOlczyk 2>&1意味着将stdout(1)的目标复制到stderr(2),因此除非您事先设置了stdout重定向,否则它将没有用。
yaegashi

2
@TLOlczyk它不具备成为标准输出第一-你可以做标准错误第一:2>capture_file >&2(但不这样做,因为这不是地道)。重要的是,在将流复制到另一个之前,您将其中一个重定向到文件。
Toby Speight 2015年

1

除了使用命令分组,{}您还可以在子外壳中运行命令并立即捕获输出(和/或错误):

( a && b && c ) >file.txt 2>&1

范例:

$ ( echo foo && echo bar && echo baz && echos foo ) >check 2>&1

$ cat check
foo
bar
baz
No command 'echos' found, did you mean:
 Command 'echo' from package 'coreutils' (main)
echos: command not found
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.