AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 409930
Accepted
Vlastimil Burián
Vlastimil Burián
Asked: 2017-12-10 08:21:35 +0800 CST2017-12-10 08:21:35 +0800 CST 2017-12-10 08:21:35 +0800 CST

Qual é a maneira correta de lidar com o código de saída do último comando?

  • 772

Atualmente, estou fazendo isso em um script de shell POSIX:

success=false

pv --wait "$input_filename" | openssl enc -aes-256-cbc -d -salt -out "$output_filename" && success=true

if [ "$success" = "true" ]
...

O problema é que não tenho certeza se faço isso corretamente.

Por exemplo, não entendo a diferença entre essa abordagem e apenas verificar $?.

Por que eu me importo?

Bem, porque ShellCheck.net me avisou:

SC2181 Verifique o código de saída diretamente com, por exemplo, 'if mycmd;', não indiretamente com $?.

shell-script posix
  • 2 2 respostas
  • 3849 Views

2 respostas

  • Voted
  1. nxnev
    2017-12-10T08:44:58+08:002017-12-10T08:44:58+08:00

    Se você só precisa verificar se o comando foi bem-sucedido ou não, o if command; then foo; else bar; fideve atender às suas necessidades.

    Mas se por algum motivo você precisar fazer um tratamento de erro mais complexo, verificar o valor de $?seria mais apropriado:

    command
    case $? in
      0) foo ;;
      1) bar ;;
      2) baz ;;
      *) something_else ;;
    esac
    
    • 6
  2. Best Answer
    jesse_b
    2017-12-10T08:38:42+08:002017-12-10T08:38:42+08:00

    De acordo com o link que você postou, deve ser algo assim:

    if pv --wait "$input_filename" | openssl enc -aes-256-cbc -d -salt -out "$output_filename"; then
            code for true
    else
            code for false
    fi
    

    Em meus testes, isso pode ser um problema com os pipelines, dependendo do que está do outro lado do seu ... Acho que com o openssl você deve ficar bem, mas se estiver canalizando para algo como catou echoacredito que sempre será tratado como sucesso porque o último comando no pipeline sairá com sucesso.

    Se você tiver apenas um comando para executar em caso de sucesso ou falha, algo assim também pode funcionar:

    command && code for success 
    

    ou

    command || code for failure
    
    • 5

relate perguntas

  • Subtraindo a mesma coluna entre duas linhas no awk

  • Um script que imprime as linhas de um arquivo com seu comprimento [fechado]

  • exportar variáveis ​​​​env programaticamente, via stdout do comando [duplicado]

  • Dividir por delimitador e concatenar problema de string

  • MySQL Select com função IN () com array bash

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Matriz JSON para bash variáveis ​​usando jq

    • 4 respostas
  • Marko Smith

    A data pode formatar a hora atual para o fuso horário GMT? [duplicado]

    • 2 respostas
  • Marko Smith

    bash + lê variáveis ​​e valores do arquivo pelo script bash

    • 4 respostas
  • Marko Smith

    Como posso copiar um diretório e renomeá-lo no mesmo comando?

    • 4 respostas
  • Marko Smith

    conexão ssh. Conexão X11 rejeitada devido a autenticação incorreta

    • 3 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Marko Smith

    comando systemctl não funciona no RHEL 6

    • 3 respostas
  • Marko Smith

    rsync porta 22 e 873 uso

    • 2 respostas
  • Marko Smith

    snap /dev/loop em 100% de utilização -- sem espaço livre

    • 1 respostas
  • Marko Smith

    chave de impressão jq e valor para todos no subobjeto

    • 2 respostas
  • Martin Hope
    EHerman Matriz JSON para bash variáveis ​​usando jq 2017-12-31 14:50:58 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Drux A data pode formatar a hora atual para o fuso horário GMT? [duplicado] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC Como posso copiar um diretório e renomeá-lo no mesmo comando? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve Como as permissões de arquivo funcionam para o usuário "root"? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe Altere o editor padrão para vim para _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey Como baixar o pacote não instalá-lo com o comando apt-get? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao Por que os diretórios /home, /usr, /var, etc. têm o mesmo número de inode (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg — o comando list-keys gera uid [ desconhecido ] depois de importar a chave privada para uma instalação limpa 2017-11-26 18:26:02 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve