전송 명령

전송 명령

다른 서버에 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"

관련 정보