私はこのようなスクリプトをアプリケーションのアップグレードに使用します。
#!/bin/sh
tar fUxz data.tar.gz --overwrite
tar fd data.tar.gz >$0.diff
if [ -s $0.diff ]
then
mv $0.diff $0.out
else
echo "ok" >$0.out
fi
抽出/上書きが失敗した場合に備えて、*。outファイルにエラーメッセージを入れたいです。私のディレクトリにはファイルf1.lmsがありました:
-rw-r--r--+ 1 user1 wheel 27777 Jun 16 2010 f1.lms
スクリプト実行後:
-rw-r--r--+ 1 user1 wheel 27777 Mar 20 14:29 f1.lms
そして、私は.outでそのようなメッセージを受け取りました:
f1.lms: Mode differs
f1.lms: Uid differs
f1.lms: Gid differs
理由は何ですか?それは抽出が失敗したことを意味しますか?「OK」を取得するにはどうすればよいですか?
しかし、Pythonスクリプト(pexpect)からこのスクリプトを呼び出すと、別のメッセージが表示されます。
tar: This does not look like a tar archive
tar: Skipping to next header
tar: Archive contains obsolescent base-64 headers
tar: Error exit delayed from previous errors
ファイルが抽出されているのがわかりますが、「Mode/..different」という警告はありません-diffコマンドが機能しないようです。
How to make this script working - both simply as shell script and from the python?