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


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.


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.


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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.