GNU/Linux >> Znalost Linux >  >> Linux

Skrýt výstup příkazu shellu pouze při úspěchu?

Řešení 1:

Pro tento účel by mělo být dostatečně snadné napsat skript.

Něco jako tento zcela netestovaný skript.

OUTPUT=`tempfile`
program_we_want_to_capture &2>1 > $OUTPUT
[ $? -ne 0 ]; then
    cat $OUTPUT
    exit 1
fi
rm $OUTPUT

Na druhou stranu pro příkazy, které spouštím jako součást skriptu, obvykle chci něco lepšího, než jen tisknout celý výstup. Často omezuji to, co vidím, na neznámé. Zde je scénář, který jsem upravil podle něčeho, co jsem četl před více než deseti lety.

#!/bin/bash

the_command 2>&1 | awk '
BEGIN \
{
  # Initialize our error-detection flag.
  ErrorDetected = 0
}
# Following are regex that will simply skip all lines
# which are good and we never want to see
/ Added UserList source/ || \
/ Added User/ || \
/ init domainlist / || \
/ init iplist / || \
/ init urllist / || \
/ loading dbfile / || \
/^$/ {next} # Uninteresting message.  Skip it.

# Following are lines that we good and we always want to see
/ INFO: ready for requests / \
{
  print "  " $0 # Expected message we want to see.
  next
}

# any remaining lines are unexpected, and probably error messages.  These will be printed out and highlighted.
{
  print "->" $0 # Unexpected message.  Print it
  ErrorDetected=1
}

END \
{
  if (ErrorDetected == 1) {
    print "Unexpected messages (\"->\") detected in execution."
    exit 2
  }
}
'
exit $?

Řešení 2:

Nemyslím si, že existuje čistý způsob, jak to udělat, jediné, co mě napadá, je

  • Zachyťte výstup příkazu.
  • Zkontrolujte návratovou hodnotu příkazu a zda selhal
    • zobrazit zachycený výstup.

Implementace tohoto může být zajímavý projekt, ale možná nad rámec otázek a odpovědí.

Řešení 3:

Nastavil bych bash funkci takto:

function suppress { /bin/rm --force /tmp/suppress.out 2> /dev/null; ${1+"[email protected]"} > /tmp/suppress.out 2>&1 || cat /tmp/suppress.out; /bin/rm /tmp/suppress.out; }

Pak stačí spustit příkaz:

suppress foo -a bar

Řešení 4:

Zkuste to:

out=`command args...` || echo $out

Linux
  1. Aliasy příkazového řádku v prostředí Linux

  2. Jak přiřadit výstup příkazu proměnné shellu?

  3. Pointa externího příkazu `cd`?

  1. Ukládání výstupu příkazu do proměnné Shell?

  2. Přesměrovat výstup příkazu v „příkazu času“?

  3. Nejlepší způsob, jak zrušit všechny úlohy Slurm z výstupu příkazů Shell?

  1. Skryjte skryté soubory Linuxu ve Windows

  2. Jak připojit výstup do souboru?

  3. Získejte první řádek výstupu příkazu shellu