명령줄에서 직접 실행하면 stdout 및 stderr을 스크립트에서 다음과 같은 파일로 리디렉션할 수 있다는 것을 알고 있습니다.
sh myscript1.sh &>output.txt &
그러나 명령줄을 사용하는 대신 동일한 폴더의 다른 bash 스크립트에서 위 명령을 실행하면 작동하지 않습니다.
터미널에 stdout과 stderr이 표시되지만, output.txt는 전혀 작성되지 않습니다. 왜 이런 현상이 발생하며 어떻게 해결합니까?
답변1
이는 &>
리디렉션 연산자입니다.특정bash
. 당신은 sh
명령줄에서 스크립트를 실행하는 데 익숙한 것 같습니다 ( #!
스크립트 자체의 -line에 의존하지 않음). 사용하는 스크립트에 이 작업을 수행하면 작동한다는 보장이 전혀 없습니다 &>
./bin/sh
bash
대신 표준 출력 및 표준 오류를 리디렉션하는 이식 가능한 방법의 경우 다음을 사용하십시오.
./myscript.sh >output.txt 2>&1
&>
또는 리디렉션(및/또는 기타 bash
특정 항목)을 실제로 사용하려는 경우 를 bash scriptname
사용하여 스크립트를 실행하거나 스크립트에 실행 파일을 가리키는 올바른 줄이 bash
있고 실행 가능한지 확인한 다음 스크립트를 .#!
bash
./scriptname
쉘 이 아닌 bash
경우utility &>file
utility & >file
이는 다음과 같습니다.
utility &
>file
utility
백그라운드에서 시작된 다음 이름이 빈 파일( file
이미 있는 경우 잘림)을 생성합니다. file
아니요실수bash
해당 명령에서는 사용자가 기대하는 대로 수행되지 않습니다 .