簡體   English   中英

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

[英]tar returns 1 in script, but not interactively

如果我運行以下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文件設置為tar)

在我的繩子盡頭 - 看着焦油的替代品,但需要知道為什么會這樣,所以我可以在晚上睡覺

有任何想法嗎 ?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM