Bagaimana cara menyembunyikan keluaran terminal saat menjalankan perintah?

62

Ketika saya meluncurkan program tertentu dari baris perintah seperti gerhana dan penampil dokumen di 11.10 itu memuntahkan banyak informasi yang tampaknya tidak penting.

Juga ketika mereka dijalankan di latar belakang mereka kadang-kadang terus menghasilkan keluaran ke terminal yang saat ini saya kerjakan, yang menjengkelkan.

Saya ingin mereka hanya meluncurkan dan menyimpan latar belakang di latar belakang. Alasan saya adalah bahwa jika Anda meluncurkan program-program ini melalui GUI (misalnya mengklik dua kali pada ikon) pesan-pesan ini tidak pernah ditampilkan kepada saya, jadi saya tidak memerlukannya di baris perintah.

Anake
sumber

Jawaban:

81

Jika Anda dapat menghindari penulisan hal-hal di konsol, itu tergantung pada bagaimana output dari program dibuat. Jika dialirkan ke output standar, maka itu cukup untuk dilakukan

$ eclipse >/dev/null

dan tidak ada output yang harus dibuat.

Untuk menekan pesan kesalahan juga:

$ eclipse >/dev/null 2>&1

Atau dalam bash, cukup:

$ eclipse &>/dev/null

Tetapi jika mereka melakukannya dengan cara yang berbeda maka itu mungkin menjadi masalah untuk menghentikannya menulis di konsol.

jika mungkin gunakan solusi yang diberikan oleh MuffinStateWide

Penderitaan
sumber
2
Mungkin ingin membuatnya eclipse 2&>1 >/dev/nulluntuk dihilangkan stderr. Standarnya hanya pengalihan stdout. Dan tidak ada cara "berbeda" untuk melakukannya, jika Anda membersihkan stdout dan stderr ke dalam nether, tidak akan ada output.
TC1
@ TC1 Pada prinsipnya, sebuah program dapat membuka kembali / dev / tty dan mencetak hasilnya di sana. Dalam praktiknya, program GUI tidak akan melakukan itu.
Random832
@ Random832 Nah pada prinsipnya, saya sarankan pipa yang stderr ke / dev / dsp atau aplay untuk lulz ekstra ... :) Tapi Anda benar, secara teori itu bisa dilakukan, dalam praktek - saya mungkin akan di setidaknya menulis email yang agak tidak sopan kepada orang yang melakukan itu.
TC1
5
@ TC1 "2> & 1> / dev / null" akan mengarahkan stdout ke ember bit, tetapi stderr tidak akan dialihkan. Anda perlu membalik urutan dan melakukan: "> / dev / null 2> & 1"
William Pursell
9
Anda juga dapat melakukan: eclipse &> /dev/null. Yang menangkap baik stdin dan stderr ke titik redirect (dalam bash)
warren
12

Anda dapat membuat fungsi bash yang akan alias nama perintah dan menambahkan beberapa fungsi tambahan untuk mencapai apa yang Anda minta.

Misalnya: katakanlah Anda ingin meluncurkan gvim(editor teks gui) dari baris perintah.

Anda bisa menulis fungsi seperti ini:

function gvim () {
    nohup gvim "$@" > /dev/null 2>&1 & disown
}

(tambahkan fungsi ini ke file .bashrcatau Anda .bash_aliasesagar selalu dimuat)

Penjelasan:

  • ini akan alias gvimperintah dengan fungsi bash juga bernama gvim(jadi ketika Anda mengetikkan gvimbash prompt, itu akan memanggil gvimfungsi Anda , daripada menjalankan gvimperintah nyata . Fungsi Anda kemudian memanggil gvimperintah nyata (dan menerima arg regulernya), dengan beberapa fitur tambahan:

    • mengarahkan ulang stdout dan stderr ke /dev/null(menekan output ke terminal)
    • digunakan &untuk menjalankan perintah di latar belakang (sehingga shell Anda tidak diblokir)
    • gunakan disownuntuk menghapus pekerjaan latar belakang dari shell (sehingga tidak akan muncul dalam daftar pekerjaan aktif)
    • gunakan nohupuntuk melepaskan proses dari terminal (sehingga Anda dapat mengakhiri sesi shell Anda atau menutup terminal Anda tanpa mematikan proses)
Corey Goldberg
sumber
btw, saya pikir ini adalah solusi yang lebih komprehensif daripada jawaban yang diterima dari @Misery
Corey Goldberg
6

coba tambahkan --help sebagai saklar perintah dan cari "quiet" ini akan menekan output, atau baru saja meluncurkan dari GUI. dan luncurkan dengan sakelar atau temukan cara untuk menekannya melalui skrip

secara pribadi saya memulai dari cli untuk mendapatkan output itu jadi saya tidak yakin itu mungkin untuk semua aplikasi GUI.

MuffinStateWide
sumber