GNU/Linux >> Belajar Linux >  >> Linux

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

Pertanyaan ini sudah memiliki jawaban di sini :mengalihkan ke /dev/null

(6 jawaban)
Tutup 6 tahun yang lalu.

Saya ingin mencegah program saya mengirim stdout dan stderr ke terminal, file, atau perangkat apa pun. Untuk ini, saya memiliki tiga perintah yang melintas di benak saya, tetapi saya tidak dapat membedakan perbedaannya. Bisakah Anda menjelaskan arti masing-masingnya kepada saya.

# ./run > /dev/null
# ./run > /dev/null 1>&2
# ./run > /dev/null 2>&1

Jawaban yang Diterima:

# ./run > /dev/null

Ini mengalihkan stdout ke /dev/null , tetapi tidak melakukan apa pun dengan stderr. Karena Anda meminta untuk mengalihkan dari stdout dan stderr, ini tidak melakukan apa yang Anda inginkan.

# ./run > /dev/null 1>&2

Ini mengalihkan stdout ke /dev/null , dan kemudian mengalihkan stdout lagi (1> ) ke mana pun stderr menunjuk (&2 ) yang mungkin merupakan terminal dan mungkin tempat yang ditunjuk stdout sebelum Anda mengarahkannya. Jadi efek bersihnya di sini adalah (mungkin) tidak ada pengalihan sama sekali untuk stdout, dan untuk stderr, Anda masih tidak melakukan apa pun dengannya. Jadi ini juga bukan yang Anda inginkan.

# ./run > /dev/null 2>&1

Ini mengalihkan stdout ke /dev/null , dan kemudian mengalihkan stderr (2> ) ke mana pun stdout menunjuk, yaitu /dev/null karena di situlah Anda baru saja mengarahkannya. Sepertinya ini yang Anda inginkan.

Saya tidak bisa membedakan perbedaan mereka.

Sebenarnya, Anda harus bisa membedakan perbedaan dengan cukup mudah. Katakanlah ./run berisi ini:

#!/bin/sh
echo stdout
echo stderr >&2

Maka hasilnya harus sebagai berikut:

# ./run > /dev/null
stderr
# ./run > /dev/null 1>&2
stdout
stderr
# ./run > /dev/null 2>&1

Perbedaannya jelas!


Linux
  1. Bagaimana Linux Menangani Beberapa Pemisah Jalur Berturut-turut (/home////username///file)?

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

  3. Cara menjalankan file sh dari file sh lain

  1. Redirect stdout saat proses sedang berjalan - Proses apa yang dikirim ke /dev/null

  2. DD dari /dev/zero ke /dev/null...apa yang sebenarnya terjadi

  3. /dev/sdb:Tidak ada file atau direktori seperti itu (tetapi /dev/sdb1 dll. ada)

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

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

  3. Buat perangkat blok virtual yang menulis ke /dev/null