2015-08-18 39 views
6

Bir tcsh komut dosyası yazmayı deniyorum. Komutlarından herhangi biri başarısız olursa komut çıktısına ihtiyacım var. kabuğundaHata İletisi

I set -e kullanın ama tcsh

#!/usr/bin/env tcsh 

set NAME=aaaa 
set VERSION=6.1 

#set -e equivalent 
#do somthing 

teşekkürler eşdeğer bilmiyorum

+0

Denediniz mi? Else 'tcsh' kontrol ettin mi? İyi şanslar. – shellter

+0

Set -e'yi kabukta olduğu gibi kullandığımda, bu hatayı aldım: set: Değişken adı bir harfle başlamalıdır. – ARM

+0

Man sayfasına baktığımda, bence '#!/Bin/tcsh -e ... '(tablonun en üstünde) gibi kullanmanız gerektiğini düşünüyorum. İyi şanslar. – shellter

cevap

7

olarak (t), CSH, set bir değişken tanımlamak için kullanılır; set foo = barbar değerini foo değişkenine atayacaktır (foo=bar Bourne kabuk betiklerinde olduğu gibi). tcsh(1) herhangi bir durumda

:
Argument list processing 
    If the first argument (argument 0) to the shell is `-' then it is a 
    login shell. A login shell can be also specified by invoking the shell 
    with the -l flag as the only argument. 

    The rest of the flag arguments are interpreted as follows: 

[...] 

    -e The shell exits if any invoked command terminates abnormally or 
     yields a non-zero exit status. 

Yani -e bayrağıyla tcsh çağırmak gerekir.

% cat test.csh 
true 
false 

echo ":-)" 

% tcsh test.csh 
:-) 

% tcsh -e test.csh 
Exit 1 

sh 'ın set -e olduğu gibi, zamanında bu ayarlamak için bir yolu yoktur, ancak hashbang ekleyebilirsiniz: Bunu test edelim

#!/bin/tcsh -fe 
false 

yüzden otomatik olarak ekleniyor Eğer ./test.csh çalıştırmak, ancak, csh test.csh yazarken benim önerim csh senaryoyu çağıracağı bir start.sh gibi bir şey kullanmaktır yüzden bu eklemek olmaz:

#!/bin/sh 
tcsh -ef realscript.csh 
İlgili konular