転送コマンド

転送コマンド

他のサーバーに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"

関連情報