명령 대체(Bash/Dash)의 잘못된 명령 순서

명령 대체(Bash/Dash)의 잘못된 명령 순서

아래 예와 같이 바꾸기 명령을 실행할 때 실행 순서가 깨지는 이유는 무엇입니까? 먼저 chmod명령을 실행한 echo 1다음 echo 2?

echo $(echo 1; echo 2; chmod 444 nonexistent_file)

결과:

chmod: Cannot access 'nonexistent_file': No such file or directory
1 2

답변1

실행 순서가 깨지지 않았고 출력 순서가 예상한 것과 다릅니다.

echo 1실행 하고 echo 2출력을 표준 출력에 기록합니다. 쉘은 명령 대체를 위해 이를 축적합니다. 그런 다음 chmod오류 메시지를 실행하고 표준 오류로 인쇄합니다. 표준 오류는 터미널로 직접 이동하므로 오류가 먼저 옵니다. 마지막으로 외부 echo실행 명령은 결과 "1 2"를 대체합니다.

관련 정보