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 / ubuntu / Perguntas / 1370604
Accepted
cocomac
cocomac
Asked: 2021-10-21 17:05:13 +0800 CST2021-10-21 17:05:13 +0800 CST 2021-10-21 17:05:13 +0800 CST

Como faço para verificar se o comando falhou ... com um pipe?

  • 772

Então eu tenho um script assim:

somecommad | grep --invert-match something

Eu gostaria de poder executar condicionalmente um comando diferente se somecommandfalhar. Aqui está o que eu tentei:

somecommand | grep --invert-match something || {
    echo 'Oops'
}

Mas isso não funcionou (o grepnão foi executado). Qual é a maneira correta de fazer isso?

command-line
  • 2 2 respostas
  • 4092 Views

2 respostas

  • Voted
  1. Best Answer
    cocomac
    2021-10-21T17:31:56+08:002021-10-21T17:31:56+08:00

    @steeldriver mencionado nos comentários que PIPESTATUSpode funcionar. Eu tentei, e funcionou bem. Aqui está o que eu fiz:

    somecommand | grep --invert-match something
    if [ "${PIPESTATUS[0]}" != "0" ]; then
        echo 'Oops'
    fi
    

    Ele executa o comando como antes, mas então eu tenho uma ifinstrução para examinar a PIPESTATUSmatriz. Eu só me importo com o primeiro elemento, então é para esse que eu olho. Eu verifico se falhou (se o código de saída não for 0), e falhou, executeecho 'Oops'

    • 12
  2. muru
    2021-10-22T02:25:10+08:002021-10-22T02:25:10+08:00

    Outra maneira, dependendo do comportamento exato necessário, é usar a pipefailopção :

    O status de saída de um pipeline é o status de saída do último comando no pipeline, a menos que a pipefailopção esteja habilitada (consulte The Set Builtin ). Se pipefailestiver habilitado, o status de retorno do pipeline será o valor do último comando (mais à direita) a sair com um status diferente de zero ou zero se todos os comandos saírem com êxito.

    Então, se você não se importa com qual somecommandou grepfalhou, desde que um deles tenha falhado:

    set -o pipefail
    if ! somecommand | grep --invert-match something; then
        echo 'Oops'
    fi
    
    • 7

relate perguntas

Sidebar

Stats

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

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

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