GNU/Linux >> Belajar Linux >  >> Linux

Sembunyikan output dari perintah shell hanya jika berhasil?

Solusi 1:

Seharusnya cukup mudah untuk menulis skrip untuk tujuan ini.

Sesuatu seperti skrip yang sama sekali belum teruji ini.

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

Di sisi lain untuk perintah yang saya jalankan sebagai bagian dari skrip, saya biasanya menginginkan sesuatu yang lebih baik daripada sekadar mencetak semua hasilnya. Saya sering membatasi apa yang saya lihat pada hal yang tidak diketahui. Ini skrip yang saya adaptasi dari sesuatu yang saya baca lebih dari satu dekade lalu.

#!/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 $?

Solusi 2:

Menurut saya tidak ada cara bersih untuk melakukan ini, satu-satunya hal yang dapat saya pikirkan adalah

  • Tangkap output dari perintah.
  • Periksa nilai kembalian dari perintah dan jika gagal
    • menampilkan keluaran yang ditangkap.

Menerapkan ini mungkin merupakan proyek yang menarik tetapi mungkin di luar Q&A.

Solusi 3:

Saya akan menyiapkan fungsi bash seperti ini:

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; }

Kemudian, Anda bisa menjalankan perintah:

suppress foo -a bar

Solusi 4:

Coba begitu:

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

Linux
  1. Bagaimana Cara Menetapkan Output Perintah Ke Variabel Shell?

  2. Menyimpan Output Perintah Dalam Variabel Shell?

  3. Output Dari Perintah "terakhir"?

  1. Apa Perbedaan Get Command Output Menggunakan`command`dan $(command) Di Shell??

  2. Redirect Output Dari Sebuah Perintah Dalam `time Command`?

  3. Bagaimana cara menambahkan output ke file?

  1. Bagaimana saya bisa mengulang output dari perintah shell?

  2. Dapatkan baris pertama dari keluaran perintah shell

  3. Bagaimana saya bisa menyembunyikan output dari aplikasi shell di Linux?