Was bedeutet -f in einer if-Anweisung in einem Bash-Skript?

Ich versuche, diesen Code zu verstehen:

if [ -f /etc/bashrc ]; then . /etc/bashrc fi 

Ich bin mir nicht sicher was das -f genau bedeutet.

Antwort

Die relevante Manpage, um dies zu überprüfen, ist die der Shell selbst, bash, da -f eine Funktionalität ist, die die Shell bietet, ist sie eine integrierte Bash.

Auf meinem System (CentOS 7), die feine Manpage behandelt es. Die grep liefert möglicherweise nicht die gleichen Ergebnisse für andere Distributionen. Wenn Sie jedoch man bash ausführen und dann nach „-f“ suchen, sollten die gewünschten Ergebnisse erzielt werden.

$ man bash | grep -A1 "\-f file$" -f file True if file exists and is a regular file. $ 

Antwort

Kurz gesagt, der Code gibt eine /etc/bashrc -Datei aus, falls vorhanden, und die Die Existenz wird durch den Befehl [ überprüft, für den -f ein Operator / Parameter ist.

if...then...else...fi -Anweisung in Shell-Skripten bewertet den Beendigungsstatus von Befehlen – 0 bei Erfolg. Es ist also richtig, so etwas zu tun:

if ping -c 4 google.com; then echo "We have a connection!" fi 

In Ihrem Fall lautet der Befehl [ Dies wird auch als test -Befehl bezeichnet. Es wäre also vollkommen gültig,

if test -f /etc/bashrc; then . /etc/bashrc fi 

das -f auszuführen Das Flag überprüft zwei Dinge: Der angegebene Pfad ist vorhanden und eine reguläre Datei. Wenn /etc/bashrc tatsächlich ein Verzeichnis ist oder fehlt, sollte der Test den Exit-Status ungleich Null zurückgeben, um einen Fehler zu signalisieren.

Dieser Befehl war ursprünglich ein separater Befehl, das heißt nicht Teil der integrierten Befehle der Shell. Heutzutage haben die meisten Bourne-ähnlichen Shells diese als eingebaut, und genau diese Shell wird verwendet.

Nebenbei bemerkt, die /etc/bashrc scheint eine unnötige zusätzliche Datei zu sein, die Ihr Administrator oder Originalautor des Code-Snippets verwendet. Es gibt /etc/bash.bashrc, die als systemweite RC-Datei für Bash gedacht ist. Man würde also erwarten, dass diese verwendet wird.

Siehe auch:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.