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.


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


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 &

3

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

Diedit:

$ command &> / dev / null


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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.