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: