chmod + modo silencioso + como forçar o código de saída 0, apesar do erro

37

É possível executar chmod e ignorar erro do comando

Exemplo (observação file.txt não existe para mostrar o exemplo)

Quando digito

chmod 777 file.txt

Recebo erro na saída

  chmod: cannot access file.txt : no such file or directory

Então, adiciono o sinalizador-f ao comando da seguinte forma: (file.txt não existe para mostrar o caso)

  chmod -f 777 file.txt
  echo $?
  1

Mas do exemplo chmod return 1

Por favor, aconselhe como forçar o comando chmod a fornecer o código de saída 0, apesar do erro

Gilles 'SO- parar de ser mau'
fonte
Por que isso é votado? Suprima qualquer saída indesejada com 2>/dev/nulle use set -eem scripts.
30--15

Respostas:

47

Por favor, aconselhe como forçar o comando chmod a fornecer o código de saída 0, apesar do erro

chmod -f 777 file.txt || :

Isso executaria :, ou seja, o comando nulo, se chmodfalhar. Como o comando nulo não faz nada, mas sempre é bem-sucedido, você verá um código de saída 0.

devnull
fonte
25
Equivalente, mas mais legível para um usuário casual é para usochmod -f 777 file.txt || true
orion
2
@orion Depende. Se alguém é familiar, :parece igualmente legível.
devnull
2
Mas se escrevermos um código mais legível que os noobs podem ler, como manteremos nossos empregos?
Nick T
11
desenvolvedor chefe aqui, apenas soltando algumas palavras-chave para ajudar outras pessoas que encontraram o mesmo problema que eu. shell_out! (cmd + '|| true') é um salva-vidas quando você tenta ser idempotente com as instalações e precisa ignorar o shell_out! erros de compilação.
21418 JackChance
54

chmod -f 777 file.txt || true

Como é um OR, se uma das instruções retornar true, o retorno será true. Isso resulta em um status de saída igual a zero.

Gerry
fonte
3
Eu adicionei esta resposta como uma alternativa para promover a prática de escrever código legível.
Gerry
2
O ramo certo de ||não será executado se chmodfor bem-sucedido ... não que isso faça muita diferença computacional aqui.
dhag
Obrigado por isso. Não acredito que estraguei tudo. :) Editado com a correção.
Gerry
5

Eu sempre amei

 chmod -f 777 file.txt || exit 0
Eran Chetzroni
fonte
3
Isso faz o script parar quando o chmod não teve êxito. A questão era fazer com que o script continuasse em execução quando houvesse um problema (erro de ignorar).
Veda