2013-10-04 21 views
5

Mam bardzo prosty skrypt csh.Nie znaleziono zdarzenia csh

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

Ale ja dostaję błąd ": Event not found.

Co jest nie tak?

+0

Zmodyfikuj pierwszą linię do '#!/Bin/csh -f' i spróbuj ponownie. Może być związany z twoim '.cshrc' lub' .tcshrc'. – timrau

+0

próbowałem. nie działa – Programmer

Odpowiedz

7

csh używa znaku ! do podstawiania historii. Tak więc w sekwencji !", " nie jest traktowany jako zamykający cudzysłów dla ciągu; raczej powłoka szuka czegoś w historii poleceń zaczynając od ", tak jak wpisanie !foo w linii poleceń powtarza ostatnie polecenie zaczynające się od foo.

Przynajmniej dla oryginalnego csh, to podstawienie jest zawsze wykonywane, nawet w ciągach z pojedynczym cudzysłowem (więc zmiana podwójnych cudzysłowów na pojedyncze cudzysłowy niekoniecznie musi pomóc).

Jedynym sposobem, aby uciec ! charakter jest z \ backslashem.

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

(Na niektóre systemów, uważam, że za pomocą apostrofów zamiast cudzysłowów unika błędu myślę, że to ponieważ w tych systemach /bin/csh jest dowiązaniem do /bin/tcsh, która działa nieco inaczej. nie powinno zależeć na tym, jeśli chcesz skrypt być przenośne.)

pamiętać, że Dodaliśmy równieżOpcjado linii #!. Zapobiega to uruchamianiu przez powłokę twojego $HOME/.cshrc przy starcie, a generalnie jest to dobry pomysł na skrypty csh. Sprawia, że ​​działają one nieco szybciej i zapobiega przypadkowej zależności od własnego .cshrc, co może być problemem, gdy inni uruchomią skrypt.

A w każdym pytaniu o csh skryptów, jestem prawnie zobowiązany [*] aby umieścić ten link:

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

[*] nie jestem faktycznie prawnie zobowiązany pisać ten link.

+1

TL; DR: "Co jest nie tak?" "csh." +1 do pytania i odpowiedzi. – stevesliva