ログをtar+gzip圧縮してssh転送するスクリプトを書いてます。

ログをtar+gzip圧縮してssh転送するスクリプトを書いてます。 tar zcf - -C /var/www/html log | ssh hoge@aaa.com 'cat > /root/log.tar.gz' この一行だと動くのですが、expectのスクリプトで spawn tar zcf - -C /var/www/html log | ssh hoge@aaa.com 'cat > /root/log.tar.gz' とすると、実行中にgzip: compressed data not written to a terminal. Use -f to force compression. というエラーが出てしまい上手く動きません。 expectの処理中は、パイプを通した処理の標準入出力の仕様が異なるのでしょうか。 どういう対処が必要か教えてください。

Linux系1,122閲覧

ベストアンサー

0

ID非公開

2014/8/29 13:34

これは、 spawn が、パイプの前だけをコマンドだと思って先に実行してしまうからです。 ですから、何とか spawn に 1コマンドだと思わせれば良いのです。 簡単なのは、 #!/bin/bash tar zcf - -C /var/www/html log | ssh hoge@aaa.com 'cat > /root/log.tar.gz' を、tenso.sh にでも、書いておいて 実行権を立て spawn ./tenso.sh とやるかです。 直接 bash を書いてしまっても良いです。 spawn bash -c "tar zcf - -C /var/www/html log | ssh hoge@aaa.com 'cat > /root/log.tar.gz'"

ThanksImg質問者からのお礼コメント

わかりやすかったです!

お礼日時:2014/8/29 14:50