2017-12-01 7 views
0

シェルスクリプトファイルに一連のbashコマンドを書き込んで、サーバ上で実行しようとしています。シェルスクリプトを生成するときにコンソールがテキストファイルに出力する

diffコマンドをスクリプトファイルに書き込んで、実行することが予想され、コンソール出力が* .txtファイルに書き込まれるまで、正常に動作します。何らかの理由で、* .txtファイルにdiffの結果が含まれていない...これを修正するために何かできますか?

A_DIR_1=methuselah/test1 
A_DIR_2=methuselah/test2 
A_DIR_3=methuselah/test3 
B_DIR_1=methuselah/backup1 
B_DIR_2=methuselah/backup2 
B_DIR_3=methuselah/backup3 
DST_DIR=methuselah/output 

echo "touch $DST_DIR/output.txt" >> /tmp/$$.sh 
for i in {1..3} 
do 
    A_DIR="A_DIR_$i" 
    B_DIR="B_DIR_$i" 
    echo "diff -qr ${!A_DIR} ${!B_DIR} >> $DST_DIR/output.txt" >> /tmp/$$.sh 
done 

cat /tmp/$$.sh 
ssh [email protected]$SERVER 'sh -s' < /tmp/$$.sh 
rm /tmp/$$.sh 
+0

このスクリプトを作成しているシェルはどちらですか? '(1..3)'は、中括拡張のための間違った方法です。構文エラー – Inian

+0

を投げます。申し訳ありませんが、それを修正しました。私はbash(Bourne Again Shell)を使用しています – methuselah

+0

何か問題がありますか?スクリプト '/ tmp/num.sh'はサーバー上で直接実行されると機能しますか? – PesaThe

答えて

0

それはあなたのように見ているがローカルに作成するファイルを期待しているが、もちろん、それはコマンドでリモートサーバーに送信されますので、それが作成されているのWHEREことです。

とにかくこれらのリダイレクトは必要ありません。

# no need to touch, either 
for loop in looopity loop; do 
    echo "diff something" # no redirect! 
done | 
ssh remoteserver >"$DST_DIR"/output.txt 

あなたが本当に本当にあなたがリモートホストに送信されたコマンドを格納する必要がある場合sshteeを追加します。

+0

より一般的には、可変リダイレクトは、この大きなハンマーのための釘の箱のように見えます。あなたの一般的なユースケースを見れば、私たちはあなたが望むことをやり遂げるためにあまり複雑ではない方法を明確に表現できます。 – tripleee

+0

おそらくあなたは実際にhttps://stackoverflow.com/questions/28725333/looping-over-pairs-of-values-in-bashを探しています – tripleee

+0

こんにちは、これははるかに大きなスクリプトの一部です、理想的には私はしたいです'echo' diff -qr $ {!A_DIR} $ {!B_DIR} >> $ DST_DIR/output.txt ''それを動作させるには – methuselah

関連する問題