我使用这样的脚本进行应用程序升级:
#!/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
原因是什么——这是否意味着提取失败?我该怎么做才能“好”?
但是当我从我的 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
我可以看到文件已提取,但没有警告“模式/.. 不同” - 看起来 diff 命令不起作用。
如何使这个脚本工作 - 简单地作为 shell 脚本和来自 python?