2015-08-18 9 views
6

Ich versuche, ein Tcsh-Skript zu schreiben. Ich brauche den Skript-Exit, wenn einer seiner Befehle fehlschlägt.Exit tcsh Skript, wenn Fehler

In Shell verwenden I set -e aber ich weiß nicht, den entsprechenden Betrag in tcsh

#!/usr/bin/env tcsh 

set NAME=aaaa 
set VERSION=6.1 

#set -e equivalent 
#do somthing 

Dank

+0

Haben Sie es versucht? Sonst hast du 'man tcsh' überprüft? Viel Glück. – shellter

+0

Wenn ich set -e wie in der Shell verwende, habe ich diesen Fehler: set: Variablenname muss mit einem Buchstaben beginnen. – ARM

+0

Wenn ich auf die man-Seite schaue, denke ich, dass Sie sie wie '#!/Bin/tcsh -e ...' verwenden müssen (natürlich am Anfang der Datei). Viel Glück. – shellter

Antwort

7

In (t) CSH, set verwendet wird, um eine Variable zu definieren; set foo = bar weist der Variablen foo den Wert bar zu (wie in Bourne-Shell-Skripten foo=bar).

In jedem Fall von tcsh(1):

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. 

So müssen Sie tcsh mit der -e Flagge aufzurufen. Sagen wir es testen:

% cat test.csh 
true 
false 

echo ":-)" 

% tcsh test.csh 
:-) 

% tcsh -e test.csh 
Exit 1 

Es gibt keine Möglichkeit, dies zur Laufzeit festgelegt, wie mit sh ‚s set -e, aber man kann es auf die Hash-Bang hinzufügen:

#!/bin/tcsh -fe 
false 

so wird es automatisch hinzugefügt, wenn Sie laufen ./test.csh, aber das wird nicht es hinzufügen, wenn Sie csh test.csh geben, so meine Empfehlung so etwas wie ein start.sh zu verwenden ist, die das csh Skript aufrufen wird:

#!/bin/sh 
tcsh -ef realscript.csh