Bagaimana cara menyembunyikan output dari aplikasi shell di Linux?

Jawaban:

68

Anda dapat mengarahkan output dari program apa pun sehingga tidak akan terlihat.

$ program > /dev/null

Ini akan mengarahkan output standar - Anda masih akan melihat kesalahan

$ program &> /dev/null

Ini akan mengarahkan semua output, termasuk kesalahan.

theecereceive
sumber
Yang pertama tidak bekerja untuk wget
Jader Dias
Itu sebabnya wget menggunakan stderr untuk beberapa outputnya. Yang kedua harus bekerja.
theotherreceive
2
Kebetulan, Anda mungkin ingin menyimpan output wget itu ke file log, jadi ketika / jika unduhan Anda berhenti berfungsi, Anda bisa mencari tahu alasannya. Jika itu ada dalam skrip. Jika ini adalah jenis lari satu kali, maka ya, ke tempat sampah
Matt Simmons
1
Untuk wgetAnda dapat menggunakan -qopsi untuk membuatnya tenang.
pkhamre
Adakah cara untuk menekan output yang ditulis langsung ke / dev / tty?
d11wtq
30

Ada tiga perangkat IO yang tersedia di baris perintah.

 standard in - 0 
 standard out - 1 
 standard error - 2 

Untuk mengalihkan standar keluar (output default) ke file (dan menimpa file), gunakan

 command > file.log 

Untuk menambahkan file.log, gunakan 2> s

 command >> file.log

untuk mengarahkan ulang kesalahan standar ke file.log, gunakan

 command 2> file.log

dan untuk menambahkan

 command 2>> file.log

Untuk menggabungkan output menjadi satu aliran dan mengirim semuanya ke satu tempat

 command > file.log 2>&1 

Ini mengirimkan 2 (stderr) menjadi 1 (stdout), dan mengirimkan stdout ke file.log

Perhatikan bahwa mungkin juga untuk mengarahkan ulang standar ke dalam perintah yang mengharapkan stdin

 command << file.txt 

Sunting
Untuk lebih jelasnya, lihat Panduan Script Bash Lanjutan

Matt Simmons
sumber
Adakah yang bisa menjelaskan cara command > file.log 2>&1kerjanya?
Cory Klein
Seberapa rendah level yang ingin Anda ketahui?
Matt Simmons
3
@nomoreink: sebenarnya 2 perintah, satu > filedan yang kedua 2>&1. Yang pertama mengarahkan standar keluar ke file. Yang kedua mengambil deskriptor file ke-2 dan mengarahkannya ke yang pertama. Anda dapat melakukan sebaliknya, mengarahkan output standar ke kesalahan standar menggunakan >&2dan kemudian mengarahkan kesalahan standar ke file dengan 2> file.
Hubert Kario
12

Menyembunyikan stdout

./command >/dev/null

Sembunyikan stdoutdanstderr

./command >/dev/null 2>&1

Sembunyikan stdoutdan stderrlepaskan terminal (jalankan perintah di latar belakang)

./command >/dev/null 2>&1 &
bergetah
sumber
3

Jika Anda hanya ingin menyembunyikan output (dan tidak menyimpannya ke file), Anda dapat menggunakan:

Diedit:

$ command &> / dev / null

Lucho
sumber
Ini akan mengarahkan output ke file bernama null
theotherreceive
Ini menghasilkan file null
Jader Dias
1
Anda tidak akan bermaksud / dev / null, kan?
Babu
1
Ya, tentu saja, Babu. Maksud saya $ command &> / dev / null. Maafkan saya karena mengetik terlalu cepat untuk kebaikan saya sendiri.
Lucho
2

Untuk Mac OS X (10.6 "Snow Leopard"):

Jika Anda perlu menyembunyikan output tanpa membiarkan program mengetahuinya dengan memeriksa deskriptor file output / kesalahan Anda dapat mencoba menggunakan berikut ini di shell:

stty flusho; command ;stty -flusho

atau jika Anda hanya ingin menyembunyikan input dari terminal:

stty  -echo; command ;stty  echo

Lihat halaman manual stty (1) untuk informasi lebih lanjut

Untuk Linux yang saya tahu adalah bahwa Ubunutu (10,04 "Lucid") dan beberapa "Debian / Arch" (komentar di bawah - tnx hendry) tidak memiliki flushopengaturan (dan saya tidak dapat melihat hal lain yang sesuai di halaman manual) . The echopengaturan bekerja pada Ubuntu pula.

Vike
sumber
Stty default saya di bawah Debian / Arch tidak memiliki opsi ini.
hendry
Tentu saja saya harus menyebutkan bahwa saya bahkan tidak di OS OP. Mengedit pos saya.
vike