Wie kann man dem Befehl „cat“ sagen, dass er nicht hängen bleiben soll, wenn kein Pfad angegeben ist?

Wie kann man dem Befehl „cat“ sagen, dass er nicht hängen bleiben soll, wenn kein Pfad angegeben ist?

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

catwird ignoriert STDIN, wenn Sie einen Dateinamen angeben. Eine Verbindung STDINzu /dev/nullwä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, 0wenn 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

verwandte Informationen