ここから本文です

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

joahfuaaufeさん

2014/8/2911:51:09

ログを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の処理中は、パイプを通した処理の標準入出力の仕様が異なるのでしょうか。
どういう対処が必要か教えてください。

閲覧数:
739
回答数:
1

違反報告

ベストアンサーに選ばれた回答

アバター

ID非公開さん

2014/8/2913:34:05

これは、
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'"

質問した人からのコメント

2014/8/29 14:50:36

成功 わかりやすかったです!

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

5文字以上入力してください

Q&Aをキーワードで検索:

Yahoo!知恵袋カテゴリ

一覧を見る

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。