다른 서버에 tar 파일을 만들고 싶습니다. 이 명령을 실행하면 작동하지만 이 명령을 쉘 스크립트에 넣으면 오류가 반환됩니다.
tar cvzf - prod_test.txt| ssh [email protected] "cat > prod_test5.tar.gz"
tar: -: 계산할 수 없음: 해당 파일 또는 디렉터리 없음 tar: prod_test.txt|: 계산할 수 없음: 해당 파일 또는 디렉터리 없음 tar: ssh: 계산할 수 없음: 해당 파일 또는 디렉터리 없음 tar:[이메일 보호됨]:계산할 수 없음: 해당 파일 또는 디렉터리 없음 tar: "cat: 계산할 수 없음: 해당 파일 또는 디렉터리 없음 tar:>: 계산할 수 없음: 해당 파일 또는 디렉터리 없음 tar: prod_test4.tar.gz": 계산할 수 없음: 없음 해당 파일 또는 디렉토리 v ``Om7 7Þ'(tar:
#!/bin/sh
dy=`date +%a`
bk='/d01/backup'
전송 명령
trans_oracle='tar cvzf - prod_test.txt| ssh [email protected] "cat > prod_test4.tar.gz"'
삭제 명령
del_oracle='rm -f '$bk'/'$dy'_apps_indus_prod.tar.gz'
echo '****** Start Time ******' >> bk'/'$dy'_transfer_apps_bk_net.log'
date >> $bk'/'$dy'_transfer_apps_bk_net.log'
printf '\n' >> $bk'/'$dy'_transfer_apps_bk_net.log'
--#Transfer Backup
$trans_oracle
--#Delete Backup
#$del_oracle
echo '****** End Time ******' >> $bk'/'$dy'_transfer_apps_bk_net.log'
date >> $bk'/'$dy'_transfer_apps_bk_net.log'
printf '\n' >> $bk'/'$dy'_transfer_apps_backuplog.log'
printf '\n' >> $bk'/'$dy'_transfer_apps_backuplog.log'
실수
tar: -: 계산할 수 없음: 해당 파일 또는 디렉터리 없음 tar: prod_test.txt|: 계산할 수 없음: 해당 파일 또는 디렉터리 없음 tar: ssh: 계산할 수 없음: 해당 파일 또는 디렉터리 없음 tar:[이메일 보호됨]:계산할 수 없음: 해당 파일 또는 디렉터리 없음 tar: "cat: 계산할 수 없음: 해당 파일 또는 디렉터리 없음 tar:>: 계산할 수 없음: 해당 파일 또는 디렉터리 없음 tar: prod_test4.tar.gz": 계산할 수 없음: 없음 해당 파일 또는 디렉토리 v ``Om7 7Þ'(tar: 이전 오류로 인해 지연된 오류 종료 –
암호:
#!/bin/sh
dy=`date +%a`
bk='/d01/backup'
#Transfer Command
trans_oracle='tar cvzf - prod_test.txt| ssh [email protected] "cat > prod_test4.tar.gz"'
#Delete Command
del_oracle='rm -f '$bk'/'$dy'_apps_indus_prod.tar.gz'
echo '****** Start Time ******' >> $bk'/'$dy'_transfer_apps_bk_net.log'
date >> $bk'/'$dy'_transfer_apps_bk_net.log'
printf '\n' >> $bk'/'$dy'_transfer_apps_bk_net.log'
#Transfer Backup
$trans_oracle
#Delete Backup
#$del_oracle
echo '****** End Time ******' >> $bk'/'$dy'_transfer_apps_bk_net.log'
date >> $bk'/'$dy'_transfer_apps_bk_net.log'
printf '\n' >> $bk'/'$dy'_transfer_apps_backuplog.log'
printf '\n' >> $bk'/'$dy'_transfer_apps_backuplog.log'
답변1
문제를 보여주기 위해서는 작은 테스트 케이스를 만드는 것으로 충분합니다.
별도로 이것은 잘 작동합니다.
ls; pwd
그럼 우리는
cmd='ls ; pwd'
이제 $cmd
";"이라는 파일에 대해 오류가 발생하고 "pwd"가 누락되었습니다.
쉘을 다시 시작하려고 할 때 "eval" 명령이 들어오는 곳은 다음과 같습니다.
eval "$cmd"
명령줄에서 지정한 것처럼 성공적으로 실행됩니다.
따라서 $trans_oracle을 다음과 같이 지정하지 마십시오.eval "$trans_oracle"