2013-10-04 3 views
5

Ich habe dieses sehr einfache csh-Skript.Ereignis nicht gefunden csh

#!/bin/csh 
     echo "Hello World!" 
     echo "How are you today?" 

Aber ich bin immer der Fehler ": Event not found.

Was ist falsch?

+0

Ändern Sie die erste Zeile in '#!/Bin/csh -f' und versuchen Sie es erneut. Es kann sich auf Ihre '.cshrc' oder' .tcshrc' beziehen. – timrau

+0

versucht. funktioniert nicht – Programmer

Antwort

7

csh verwendet das !-Zeichen für die Verlaufsersetzung. In der Sequenz !" wird " daher nicht als schließendes Anführungszeichen für die Zeichenfolge behandelt. Stattdessen sucht die Shell in Ihrem Befehlsverlauf nach etwas in der Befehlsgeschichte, beginnend mit ", genauso wie die Eingabe von !foo an der Befehlszeile den letzten Befehl wiederholt, der mit foo beginnt.

Zumindest für das ursprüngliche csh, wird diese Ersetzung immer durchgeführt, auch in Strings mit einem einfachen Anführungszeichen (das Ändern von Anführungszeichen in einfache Anführungszeichen wird nicht unbedingt helfen).

Der einzige Weg, einen ! Charakter ist mit einem \ Backslash zu entkommen.

#!/bin/csh -f 
echo "Hello World\!" 
echo "How are you today?" 

(On einig Systeme finde ich, dass nicht vermeiden die Fehler Apostrophe anstatt doppelte Anführungszeichen denke ich, das ist denn auf diesen Systemen /bin/csh ein symbolischer Link auf /bin/tcsh ist, die ein wenig anders funktioniert. Sie sollten nicht sich verlassen, wenn Sie Ihr Skript tragbar sein soll.)

Bitte beachte, dass ich auch einehinzugefügt habenOption zu der #! Zeile. Dadurch wird verhindert, dass die Shell beim Start die $HOME/.cshrc ausführt. Dies ist im Allgemeinen eine gute Idee für csh-Skripte. Dadurch werden sie ein wenig schneller ausgeführt, und es wird eine versehentliche Abhängigkeit von Ihrem eigenen .cshrc verhindert, was ein Problem sein könnte, wenn andere Ihr Skript ausführen.

Und in jeder Frage zu csh scripting, ich bin gesetzlich verpflichtet, [*] diesen Link zu posten:

http://www.perl.com/doc/FMTEYEWTK/versus/csh.whynot

[*] Ich bin eigentlich nicht legal auf diesen Link, um Posten verpflichtet.

+1

TL; DR: "Was ist los?" "csh." +1 für beide Fragen und Antworten. – stevesliva