他のサーバーにtarファイルを作成したいです。このコマンドを実行すると機能しますが、このコマンドをシェルスクリプトに入れるとエラーが返されます。
tar cvzf - prod_test.txt| ssh [email protected] "cat > prod_test5.tar.gz"
tar: -: 計算できない: 対応するファイルまたはディレクトリなし tar: prod_test.txt|: 計算できない: 対応するファイルまたはディレクトリなし tar: ssh: 計算できない: 対応するファイルまたはディレクトリなし tar:[Eメール保護]:計算できません:対応するファイルまたはディレクトリなし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:[Eメール保護]:計算できません:対応するファイルまたはディレクトリなし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"