2012-04-15 6 views
0

Wie ignoriere ich in einem (ba) sh-Skript Datei-nicht-gefundene Fehler?Wie bekomme ich Bash, um Datei-nicht-Founds zu ignorieren

ich ein Drehbuch schreibe, die einen (teilweise) Dateinamen von stdin liest, mit:

read file; $FILEDIR/$file.sh 

Ich brauche die Skript Funktionalität zu geben Dateinamen abzulehnen, die nicht existieren.

z.B.

$UTILDIR nicht enthält script.sh Benutzertypen Skript
Script versucht $UTILDIR/script.sh zuzugreifen und nicht als

./run.sh: line 32: /utiltest/script.sh: No such file or directory 

Wie kann ich das Skript einen Fehler machen drucken, aber das Skript fortsetzen, ohne den Druck der ‚normalen‘ Error?

Antwort

1

Sie können testen, ob die Datei den Code in Antwort @ gogaman die Verwendung existiert, aber Sie sind wahrscheinlich mehr daran interessiert zu wissen, ob die Datei vorhanden und ausführbare ist. Dafür sollten Sie die -x Test statt -e

if [ -x "$FILEDIR/$file.sh" ]; then 
    echo file exists 
else 
    echo file does not exist or is not executable 
fi 
+0

Sehr hilfreich. Vielen Dank! –

1
if [ -e $FILEDIR/$file.sh ]; then 
echo file exists; 
else 
echo file does not exist; 
fi 
1

verwenden Hier können wir ein Shell-Prozedur definieren, die nur ausgeführt wird, wenn die Datei

run-if-present() { 
    echo $1 is really there 
} 

[ -e $thefile ] && run-if-present $thefile 
+0

Das führt zu einer Wettlaufsituation. – Philipp

+0

@Philipp Wie? –

+0

@ tikiking1: Die Datei könnte zwischen dem Test und dem Befehl gelöscht werden, daher ist es möglich, dass in 'run-if-present' die Datei tatsächlich nicht vorhanden ist. 'run-if-present' muss immer noch mit diesem Fall umgehen. – Philipp

0

Je nachdem, was existiert Sie mit dem Skript zu tun, die Befehl wird mit einem bestimmten Beendigungscode fehlschlagen. Wenn Sie das Skript ausführen, kann der Exit-Code 126 (Berechtigung verweigert) oder 127 (Datei nicht gefunden) lauten.

command 
if (($? == 126 || $? == 127)) 
then 
    echo 'Command not found or not executable' > /dev/stderr 
fi 
+0

Dies habe ich angehängt (eine modifizierte Version), die die Erträge des Dienstprogramms erhält. Es war hilfreich, nicht genau das zu sein, wonach ich suchte. –