달리기
bash -c 'bash -c "echo test1; exit 1;" &> /tmp/x; buildresult=$?; tail -n 100 /tmp/x; exit $buildresult;'
결과는 test1
콘솔에 인쇄되고 echo $?
, 명령이 내부적으로 반환된 내용을 1
반환해야 하기 때문에 나에게는 올바른 것 같습니다.[b/d]ash -c
dash -c 'dash -c "echo test1; exit 1;" &> /tmp/x; buildresult=$?; tail -n 100 /tmp/x; exit $buildresult;'
동일한 출력을 생성하지만 0
그에 따라 반환됩니다 echo $?
.
쉘과 이식 가능한 쉘 프로그래밍에 대한 이해를 넓히기 위해 이 차이점을 이해하고 싶습니다.
저는 Ubuntu 17.10(Artful Aardvark)에서 bash
4.4.12 및 0.5.8-2.3ubuntu1을 사용하고 있습니다.dash
답변1
&>
POSIX에는 리디렉션이 없습니다.의 영향을 받지 않습니다 dash
. 구문 분석 & >
되므로 명령이 대신 백그라운드에서 실행됩니다.백그라운드 명령의 종료 상태가 0입니다.부모의 관점에서 보면, 당신이 읽어도 그만 두지 않았기 때문입니다 $?
.
이것이 (적어도 나에게는) test1
프롬프트에 " " 출력이 나타나는 이유이기도 합니다.뒤쪽에명령이 완료되었습니다.
배쉬에 &> foo
상응하는> foo 2>&1
, 이식 가능한 스크립트는 후자를 사용해야 합니다.