
두 개의 백업 스크립트를 만들었습니다. 하나는 파일용(filebackup.sh)이고 다른 하나는 데이터베이스용(dbbackup.sh)입니다. 변수에 출력을 filebackup.sh
호출 하고 저장했습니다. dbbackup.sh
반환된 출력은 dbbackup.sh
스크립트가 모든 백업 데이터베이스를 저장하는 tar 파일 이름입니다.
스크립트 의 끝에는 dbbackup.sh
다음이 포함됩니다.
echo $TARFILE > /dev/tty
스크립트는 filebackup.sh
다음과 같이 dbbackup.sh를 호출합니다.
DBBACKUP="`/scripts/dbbackup.sh &>/dev/null`"
그러면 스크립트의 모든 추가 출력이 /dev/null로 덤프되고 파일 이름만 반환됩니다.
filebackup.sh를 호출할 때 파일 이름이 화면에 인쇄되는 것을 제외하면 모든 것이 잘 작동합니다. 이 변수는 $DBBACKUP
비어 있습니다. 내가 여기서 뭘 잘못하고 있는 걸까?
답변1
즉, 에서 해당 >/dev/tty
부분을 제거하고 dbbackup.sh
다음을 사용하십시오.
echo $TARFILE
이는 $TARFILE을 표준 출력으로 인쇄합니다. 즉, 터미널에서 실행 중인 경우 화면에 인쇄 하거나 리디렉션이 있는 경우 파일/파이프에 인쇄합니다( dbbackup.sh
셸 백틱/ 확장 $(...)
에서 발생하는 것처럼).
위의 문제를 수정했는데도 함수가 작동하지 않는 또 다른 이유가 있습니다. dbbackup.sh
스크립트가 tar 파일 이름을 표준 출력에 인쇄하지만 다음 줄에 있습니다.
DBBACKUP="`dbbackup.sh >&/dev/null`"
dbbackup.sh
의 모든 출력을 로 리디렉션하여 삭제합니다 /dev/null
. 오류만 삭제하려면 2>/dev/null
리디렉션을 사용하세요.
더 긴 이야기: 선
echo $TARFILE > /dev/tty
스크립트의 다른 명령이 공유하는 표준 출력 스트림으로 인쇄하는 대신 명령의 출력을 echo
현재 /dev/tty
프로세스가 연결된 터미널로 리디렉션합니다 dbbackup.sh
. 따라서 dbbackup.sh
in 의 출력을 추가로 리디렉션하면 dbbackup.sh >&/dev/null
두 번째 리디렉션은 echo
명령에 영향을 주지 않습니다.