tar在脚本中返回1,但不是交互式的

时间:2014-02-18 01:04:57

标签: linux bash ubuntu tar

如果我运行以下shell脚本 (即tar文件然后删除源,如果它成功)

#!/bin/bash
tar cvf /home/acampton/vortex_data/2014-02-14/tmp-2014-02-14-test2.tar -C /home/acampton/vortex_data/2014-02-14 SIC_17_RADAR-2014-02-14_all_no_dups.csv
if [ $? -ne 0 ]; then 
then
 echo "Deleting files - tar successful ($?) at time "`date`
else
 echo "Not Deleting files - tar unsuccessful ($?) at time "`date`
fi

它返回1(=归档时更改源文件)

acampton@ALIEN:~/work/spm$ ./v1.sh
SIC_17_RADAR-2014-02-14_all_no_dups.csv
Not Deleting files - tar unsuccessful (1) at time Tue Feb 18 10:38:16 EST 2014

但是,如果我以交互方式运行它,它会起作用(每次!)

acampton@ALIEN:~/work/spm$ tar cvf /home/acampton/vortex_data/2014-02-14/tmp-2014-02-14-test2.tar -C /home/acampton/vortex_data/2014-02-14 SIC_17_RADAR-2014-02-14_all_no_dups.csv
SIC_17_RADAR-2014-02-14_all_no_dups.csv
acampton@ALIEN:~/work/spm$ echo $?
0
acampton@ALIEN:~/work/spm$

我可以保证在运行脚本(或交互式)时不会修改源代码

我也试过使用--exclude = everything_else_but_my_file并得到同样的东西

注意我不要试图盯住。 (通常会在“我们读取文件时更改文件”导致其尝试使用自己的.tar文件)

在我的绳索结束时 - 寻找焦油的替代品,但需要知道为什么会这样,所以我可以在晚上睡觉

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

if条件是倒退的。 0表示成功,非零表示失败。使用-eq代替-ne。此外,你还有一个额外的then

if [ $? -eq 0 ]; then 
 echo "Deleting files - tar successful ($?) at time "`date`
else
 echo "Not Deleting files - tar unsuccessful ($?) at time "`date`
fi

实际上,测试命令是否成功的惯用方法是将其放在if语句中。

if tar cvf /home/acampton/vortex_data/2014-02-14/tmp-2014-02-14-test2.tar -C /home/acampton/vortex_data/2014-02-14 SIC_17_RADAR-2014-02-14_all_no_dups.csv; then
 echo "Deleting files - tar successful ($?) at time $(date)"
else
 echo "Not Deleting files - tar unsuccessful ($?) at time $(date)"
fi