답변:
{ a && b && c; } >capture_file 2>&1
리디렉션 순서를 참고하십시오. 먼저 stdout을 리디렉션해야합니다.
2>&1는 stdout (1)의 대상을 stderr (2)로 복제하는 것을 의미하므로 미리 stdout 리디렉션을 설정하지 않으면 쓸모가 없습니다.
2>capture_file >&2(하지만하지 않는, 즉 관용적 아니기 때문에). 중요한 것은 스트림을 다른 스트림으로 복제하기 전에 그 중 하나를 파일로 리디렉션하는 것입니다.
명령 그룹화 {}를 사용하는 것 외에도 서브 쉘에서 명령을 실행하고 한 번에 출력 (및 / 또는 오류)을 캡처 할 수 있습니다.
( 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