bash 스크립트 내의 bash 스크립트에서 stdout 및 stderr 리디렉션

bash 스크립트 내의 bash 스크립트에서 stdout 및 stderr 리디렉션

명령줄에서 직접 실행하면 stdout 및 stderr을 스크립트에서 다음과 같은 파일로 리디렉션할 수 있다는 것을 알고 있습니다.

sh myscript1.sh &>output.txt &

그러나 명령줄을 사용하는 대신 동일한 폴더의 다른 bash 스크립트에서 위 명령을 실행하면 작동하지 않습니다.

터미널에 stdout과 stderr이 표시되지만, output.txt는 전혀 작성되지 않습니다. 왜 이런 현상이 발생하며 어떻게 해결합니까?

답변1

이는 &>리디렉션 연산자입니다.특정bash. 당신은 sh명령줄에서 스크립트를 실행하는 데 익숙한 것 같습니다 ( #!스크립트 자체의 -line에 의존하지 않음). 사용하는 스크립트에 이 작업을 수행하면 작동한다는 보장이 전혀 없습니다 &>./bin/shbash

대신 표준 출력 및 표준 오류를 리디렉션하는 이식 가능한 방법의 경우 다음을 사용하십시오.

./myscript.sh >output.txt 2>&1

&>또는 리디렉션(및/또는 기타 bash특정 항목)을 실제로 사용하려는 경우 를 bash scriptname사용하여 스크립트를 실행하거나 스크립트에 실행 파일을 가리키는 올바른 줄이 bash있고 실행 가능한지 확인한 다음 스크립트를 .#!bash./scriptname


쉘 이 아닌 bash경우utility &>file

utility & >file

이는 다음과 같습니다.

utility &
>file

utility백그라운드에서 시작된 다음 이름이 빈 파일( file이미 있는 경우 잘림)을 생성합니다. file아니요실수bash해당 명령에서는 사용자가 기대하는 대로 수행되지 않습니다 .

관련 정보