Ich versuche einfach, ein Bash-Skript dazu zu bringen
, den Inhalt einer Textdatei zurückzugeben.
#!/bin/bash
cat $1
das Problem ist, wenn diesem Bash-Skript der Pfad zu einer Datei nicht übermittelt wird, wie soll es sich dann überhaupt schließen?
denn über die normale Befehlszeile ... wenn dem Cat-Befehl kein Dateipfad übergeben wird ... hängt es sich nicht auf.
fast so, als würde es auf etwas warten.
Antwort1
#!/bin/bash
if [[ "$#" -ne 1 ]]; then
echo "Usage: $0 [INPUT FILE]" 1>&2
exit 1
fi
cat "$1"
Antwort2
Ihr Befehl hat auch ein anderes Problem: Was ist, wenn der Dateiname Leerzeichen enthält?
#!/bin/bash
cat "$1"
Immer in Anführungszeichen setzen, es sei denn, Sie haben einen zwingenden Grund, dies nicht zu tun. Und cat ""
es bleibt nicht hängen. Stattdessen würde eine Fehlermeldung wie „Keine solche Datei oder kein solches Verzeichnis“ ausgegeben.
Antwort3
cat
wird ignoriert STDIN
, wenn Sie einen Dateinamen angeben. Eine Verbindung STDIN
zu /dev/null
wäre in diesem Zusammenhang eine gültige Lösung.
$ cat test.sh
#!/bin/bash
cat $1 < /dev/null
$ ./test.sh test.sh
#!/bin/bash
cat $1 < /dev/null
$ ./test.sh
$
Der Nachteil dieses Ansatzes besteht darin, dass er zurückgibt, 0
wenn kein Dateiname angegeben wird. Daran führt kein Weg vorbei. Wenn die angegebene Datei nicht geöffnet wird, wird trotzdem ein Fehler zurückgegeben.
Antwort4
So zeigen Sie Dateiinhalte nur an, wenn die Datei vorhanden ist:
#!/bin/bash
[ -f "$1" ] && cat "$1"
Dieses Skript geht davon aus, dass das erste Argument die Datei ist, die Siecat