o que -x significa em declaração condicional if?

20

O que -xsignifica aqui:

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

Como eu pude descobrir esta página de manual if?

taymindis Woon
fonte
4
tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html Esta é a página que explica os conceitos básicos do bash if.
Christophe De Troyer
2
Ele avalia como true se o arquivo existe e é executável.
Jobin
Você tentou help if?
perfil completo de Avinash Raj

Respostas:

26

Nas man bashpáginas (especialmente na seção EXPRESSÕES CONDICIONAIS):

   -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
fonte
3
Note-se, executável para um diretório significa que ele pode ser percorrido.
rica Remer
2
@StevenPenny A segunda parte da pergunta foi "Como eu poderia descobrir esta página de manual se?"
Sparhawk
11
@drewbenn Quando você invoca testno bash, não está invocando o testbinário. Em vez disso, você está invocando o testbuilt-in do bash , que possui documentação em help test, entre outros lugares. man testpode ser enganoso em alguns casos por esse motivo.
Chris Baixo
11

ifprópria é uma palavra-chave shell, para que você possa encontrar informações sobre ela help if. ifele próprio ramifica apenas se o próximo comando retorna verdadeiro (0) ou falso (não zero). O que você realmente quer, porém, é man [ou man test, para onde [serve um alias test. Essa instrução está realmente em execução test -x /etc/rc.local, que testa para verificar se esse arquivo existe e é executável (ou tem permissão de pesquisa).

psusi
fonte
11
man [funciona também
Sparhawk #
11
Ele não apenas testa para ver se existe, mas também se o arquivo é executável.
21414 Tom Tomech
@TomFenech, ahh, certo ...
psusi
O @psusi ifnão é um shell embutido, é uma palavra-chave shell. Execute este comando type ifpara verificar isso.
Avinash Raj
3

De info test:

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

A permissão de execução é necessária em um diretório para poder entrar nele (ou seja, para tornar um diretório seu diretório de trabalho atual).

A execução é necessária em um diretório para acessar as informações de "inode" dos arquivos contidos. Você precisa disso para procurar um diretório para ler os inodes dos arquivos. Por esse motivo, a permissão de execução em um diretório geralmente é chamada de permissão de pesquisa.

girardengo
fonte