GNU/Linux >> Belajar Linux >  >> Linux

Shell:redirect stdout ke /dev/null dan stderr ke stdout

Bagaimana dengan ini:

./script 3>&1 1>/dev/null 2>&3 | ./other-script

Idenya adalah untuk "mencadangkan" deskriptor stdout, menutup stdout asli, lalu mengarahkan strerr ke stdout yang disimpan.

Ini sangat mirip dengan solusi yang diberikan oleh geirha, tetapi lebih eksplisit (bash coding dapat dengan mudah menjadi sangat kabur).


Anda ingin

./script 2>&1 1>/dev/null | ./other-script

Urutan di sini penting. Mari kita asumsikan stdin (fd 0), stdout (fd 1) dan stderr (fd 2) semuanya terhubung ke tty pada awalnya, jadi

0: /dev/tty, 1: /dev/tty, 2: /dev/tty

Hal pertama yang disiapkan adalah pipa. stdin skrip lain terhubung ke pipa, dan stdout skrip terhubung ke pipa, jadi deskriptor file skrip sejauh ini terlihat seperti:

0: /dev/tty, 1: pipe, 2: /dev/tty

Selanjutnya terjadi pengalihan, dari kiri ke kanan. 2>&1 membuat fd 2 pergi ke mana pun fd 1 saat ini pergi, yaitu pipa.

0: /dev/tty, 1: pipe, 2: pipe

Terakhir, 1>/dev/null mengalihkan fd1 ke /dev/null

0: /dev/tty, 1: /dev/null, 2: pipe

Hasil akhirnya, stdout skrip dibungkam, dan stderr dikirim melalui pipa, yang berakhir di stdin skrip lain.

Lihat juga http://bash-hackers.org/wiki/doku.php/howto/redirection_tutorial

Perhatikan juga bahwa 1>/dev/null identik dengan, tetapi lebih eksplisit daripada >/dev/null


Linux
  1. Linux:Perbedaan Antara /dev/console , /dev/tty Dan /dev/tty0?

  2. Perbedaan Antara 2>&-, 2>/dev/null, |&, &>/dev/null Dan>/dev/null 2>&1?

  3. Seberapa Portabel /dev/stdin, /dev/stdout Dan /dev/stderr?

  1. Mencegah Perintah Mengirim Stdout &Stderr ke Terminal Atau File Apa Pun?

  2. Redirect stderr ke /dev/null

  3. Kapan saya harus menggunakan /dev/shm/ dan kapan saya harus menggunakan /tmp/?

  1. Linux:Perbedaan antara /dev/console , /dev/tty dan /dev/tty0

  2. kernel:menonaktifkan /dev/kmem dan /dev/mem

  3. Bagaimana Linux menggunakan /dev/tty dan /dev/tty0