printf "..." 1>&2
함수 내부에 로그아웃이 포함된 스크립트를 작성했습니다. 스크립트(build.sh)를 실행하면서 stderr을 stdout으로, stdout을 file[0]으로 리디렉션하려는 경우 성공 여부는 순서에 따라 달라진다는 것을 알았습니다.
./build.sh 2> /tmp/log.txt
작동합니다 (분명히)./build.sh 1>/tmp/log.txt 2>&1
일하다./build.sh 2>&1 1>/tmp/log.txt
이 파일로 리디렉션하지 마십시오.
그리고 echo
:
echo "test" 2>&1 >/tmp/log.txt
일하다echo "test" >/tmp/log.txt 2>&1
일하다
이는 bash, zsh에서 복제되었으며 원래 mksh에서 보고되었습니다.
명령에서 리디렉션 문의 순서는 언제 중요합니까? 감사해요!
0: 확실하지 않음왜나는 이렇게 하고 싶지만 스크립트 사용자는 이를 시도하고 리디렉션이 실패하면 혼란스러워집니다.
답변1
리디렉션은 왼쪽에서 오른쪽으로 나열된 순서대로 수행되므로 순서가 중요합니다. 두 번째 예(올바른)에서는 ./build.sh 1>/tmp/log.txt 2>&1
먼저 fd "1"을 파일에 매핑한 다음 "1"을 "2"에 복사하고 이 매핑을 사용하여 빌드 스크립트를 실행합니다. 세 번째 예(작동하지 않음)에서는 먼저 복사합니다.현재의"1"은 "2"로 지정되고 그 이후에만 "1"이 파일에 매핑됩니다. 현재 "1"은 복사 당시의 파일이 아닙니다. 이는 터미널 또는 CI 셸 스크립트 출력 캡처 프로그램입니다.