Was bedeutet -x in einer bedingten Anweisung?

20

Was -xheißt hier:

if [ -x /etc/rc.local ] then

Wie könnte ich diese Handbuchseite für herausfinden if?

Taymindis Woon
quelle
4
tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html Auf dieser Seite werden die Grundlagen für die bash if erläutert.
Christophe De Troyer
2
Es wird als true ausgewertet, wenn die Datei vorhanden und ausführbar ist.
Jobin
Hast du es versucht help if?
Avinash Raj

Antworten:

26

Von den man bashSeiten (insbesondere dem Abschnitt "Bedingte Ausdrücke"):

   -a file
          True if file exists.
   -b file
          True if file exists and is a block special file.
   -c file
          True if file exists and is a character special file.
   -d file
          True if file exists and is a directory.
   -e file
          True if file exists.
   -f file
          True if file exists and is a regular file.
   -g file
          True if file exists and is set-group-id.
   -h file
          True if file exists and is a symbolic link.
   -k file
          True if file exists and its ``sticky'' bit is set.
   -p file
          True if file exists and is a named pipe (FIFO).
   -r file
          True if file exists and is readable.
   -s file
          True if file exists and has a size greater than zero.
   -t fd  True if file descriptor fd is open and refers to a terminal.
   -u file
          True if file exists and its set-user-id bit is set.
   -w file
          True if file exists and is writable.
   -x file
          True if file exists and is executable.

   [...]
Sylvain Pineau
quelle
3
Es ist zu beachten, dass ausführbar für ein Verzeichnis bedeutet, dass es durchlaufen werden kann.
Rich Remer
2
@StevenPenny Der zweite Teil der Frage lautete "Wie kann ich diese Handbuchseite herausfinden, wenn?"
Sparhawk
1
@drewbenn Wenn Sie testin bash aufrufen , rufen Sie nicht die testBinärdatei auf. Sie rufen stattdessen testbashs builtin auf, das unter anderem über Dokumentationen verfügt help test. man testkann aus diesem Grund in einigen Fällen irreführend sein.
Chris Down
11

ifselbst ist ein Shell-Schlüsselwort, mit dem Sie Informationen darüber finden help if. ifselbst verzweigt nur danach, ob der nächste Befehl wahr (0) oder falsch (nicht null) zurückgibt. Was Sie aber wirklich wollen, ist man [oder man test, wo [ist ein Alias ​​für test. Diese Anweisung wird gerade ausgeführt. Dabei wird geprüft test -x /etc/rc.local, ob diese Datei vorhanden und ausführbar ist (oder über die Suchberechtigung verfügt).

Psusi
quelle
1
man [funktioniert auch.
Sparhawk
1
Es wird nicht nur geprüft, ob es existiert, sondern auch, ob die Datei ausführbar ist.
Tom Fenech
@ TomFenech, ahh, richtig ...
Psusi
@psusi ifist nicht in die Shell integriert. Führen Sie diesen Befehl aus type if, um dies zu überprüfen.
Avinash Raj
3

Von info test:

`-x FILE'
    True if FILE exists and execute permission is granted (or search permission, if it is a directory).

Für ein Verzeichnis ist eine Ausführungsberechtigung erforderlich, um darin eine CD zu erstellen (d. H., Um ein Verzeichnis zu Ihrem aktuellen Arbeitsverzeichnis zu machen).

Execute ist für ein Verzeichnis erforderlich, um auf die "Inode" -Informationen der darin enthaltenen Dateien zuzugreifen. Sie benötigen dies, um ein Verzeichnis zu durchsuchen und die Inodes der darin enthaltenen Dateien zu lesen. Aus diesem Grund wird die Ausführungsberechtigung für ein Verzeichnis häufig als Suchberechtigung bezeichnet.

girardengo
quelle