2013-05-29 25 views
0

這對bash工作正常,但我需要讓它在tcsh中工作。以下是我使用的代碼:如果聲明不適用於tcsh,但在bash上正常工作

if [ -e ~/test/file ]; then echo 'yes'; else echo | mail -s 'not done' [email protected] ; fi 

這個基本代碼給了我一個錯誤,說if: Expression Syntax

我不知道錯誤是什麼意思,不知道爲什麼if語句不工作。括號前/後有空格。我試過if (test -f ~/test/file)並得到了同樣的錯誤。

我失去了默認情況下,我使用bash,這個錯誤沒有見識。我看到一些類似的情況,但沒有檢查文件的存在。

+0

請參閱:http://www.csem.duke.edu/Cluster/csh_basics.htm#if –

+0

我明白了,但沒有辦法將它全部保留在一行中。我希望這是作爲一個單行執行的。 – yatici

+1

@yatici:在tcsh中執行單行'if'的最好方法是'sh -c'if [...];然後 ... ;其他...; fi'',或者如果你需要Bash特有的功能,可以用'bash -c'替換'sh -c'。 –

回答

1

請參閱tcsh手冊頁的'文件查詢操作員'部分。

爲你所描述的tcsh的sytnax是

if (-e ~/test/file) then 
    echo 'yes' 
else 
    echo | mail -s 'not done' [email protected] 
endif 

注意Tcsh是不擅長在一行上運行的代碼段。

+0

所以我不能在一條線上做這個哈哈? – yatici

+0

我看到了一種方法來做到這一點,搜索'tcsh如果一行'。我通常解決tcsh問題的方法是運行bash;) – Nigel

1

可以在一行中的命令序列使用測試命令運行:

test -e ~/test/file && echo 'yes' || mail -s 'not done' [email protected] 

,或者如果你不感興趣的肯定的情況下,可以使用短的「if」格式

if (! -e ~/test/file) mail -s 'not done' [email protected] 
+0

是的,這就是我在回答中提到的方式。 – Nigel

相關問題