что означает -x в условном выражении?

20

Что -xзначит здесь:

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

Как я могу найти эту страницу руководства для if?

тайминдис вун
источник
4
tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html Это страница, объясняющая основы bash if.
Кристоф Де Тройер
2
Он оценивается как true, если файл существует и является исполняемым.
Jobin
Ты пробовал help if?
Авинаш Радж

Ответы:

26

Со man bashстраниц (особенно в разделе «Условные выражения»):

   -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.

   [...]
Сильвен Пино
источник
3
Следует отметить, что исполняемый файл для каталога означает, что его можно пройти.
богатый ремер
2
@StevenPenny Вторая часть вопроса была "Как я могу найти эту страницу руководства для if?"
Sparhawk
1
@drewbenn Когда вы вызываете testв bash, вы не вызываете testдвоичный файл. Вместо этого вы используете testвстроенную в bash встроенную документацию help test, в том числе. man testможет вводить в заблуждение в некоторых случаях по этой причине.
Крис Даун
11

ifсамо по себе является ключевым словом оболочки, поэтому вы можете найти информацию о нем с помощью help if. ifсама ветвится только в зависимости от того, возвращает ли следующая команда true (0) или false (не ноль). Что вы действительно хотите, хотя, man [или man test, где [псевдоним для test. Этот оператор фактически выполняется test -x /etc/rc.local, который проверяет, существует ли этот файл и является ли он исполняемым (или имеет разрешение на поиск).

psusi
источник
1
man [тоже работает
Sparhawk
1
Он не только проверяет, существует ли он, но также проверяет, является ли файл исполняемым.
Том Фенек
@ TomFenech, ааа, верно ...
psusi
@psusi if- это не оболочка, встроенная в ключевое слово shell. Для проверки запустите эту команду type if.
Авинаш Радж
3

От info test:

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

Разрешение на выполнение требуется для каталога, чтобы иметь возможность CD в него (то есть, чтобы сделать некоторый каталог вашим текущим рабочим каталогом).

Выполнение необходимо для каталога, чтобы получить доступ к информации «inode» файлов внутри. Это необходимо для поиска в каталоге для чтения инодов файлов внутри. По этой причине разрешение на выполнение в каталоге часто называется разрешением поиска.

Girardengo
источник