Dalam shell Anda dapat melakukan pengalihan >
<
,, dll., Tetapi bagaimana SETELAH program dimulai?
Inilah cara saya datang untuk menanyakan pertanyaan ini, sebuah program yang berjalan di latar belakang terminal saya terus mengeluarkan teks yang mengganggu. Ini adalah proses yang penting jadi saya harus membuka shell lain untuk menghindari teks. Saya ingin dapat melakukan >/dev/null
atau pengalihan lainnya sehingga saya dapat terus bekerja di shell yang sama.
Jawaban:
Pendek menutup dan membuka kembali tty Anda (yaitu log off dan kembali, yang juga dapat menghentikan beberapa proses latar belakang Anda dalam proses) Anda hanya memiliki satu pilihan tersisa:
misalnya:
Anda juga dapat mempertimbangkan:
screen
; Layar menyediakan beberapa TTY virtual yang dapat Anda alihkan tanpa harus membuka sesi SSH / telnet / etc barunohup
; ini memungkinkan Anda untuk menutup dan membuka kembali sesi Anda tanpa kehilangan proses latar belakang dalam ... proses.sumber
open("/path/to/new/stdout",O_WRONLY)
. O_WRONLY mungkin tidak akan tersedia; nilainya1
di Linux / glibc.1025
aktifkanO_APPEND
di sampingO_WRONLY
, yang berguna jika Anda mengarahkan stderr dan stdout ke file yang sama.Ini akan melakukan:
Ini tidak begitu bersih (menunjukkan garis-garis seperti
write(#,<text you want to see>)
:), tetapi bekerja!Anda mungkin juga tidak menyukai fakta bahwa argumen disingkat. Untuk mengontrol yang menggunakan
-s
parameter yang menetapkan panjang maksimum string yang ditampilkan.Itu menangkap semua aliran, jadi Anda mungkin ingin memfilter itu entah bagaimana:
hanya menampilkan panggilan deskriptor 1.
2>&1
adalah mengarahkan STDERR ke STDOUT, sepertistrace
menulis ke STDERR secara default.sumber
sudo
diperlukan.riffing off vladr (dan lainnya ') penelitian yang sangat baik:
buat dua file berikut di direktori yang sama, sesuatu di path Anda, katakanlah $ HOME / bin:
silence.gdb, mengandung (dari jawaban vladr):
dan diam, mengandung:
Sekarang, lain kali Anda lupa untuk mengarahkan ulang firefox, misalnya, dan terminal Anda mulai berantakan dengan pesan yang tak terhindarkan "(firefox-bin: 5117): PERINGATAN Gdk **: tabrakan XID, masalah di depan":
Anda juga dapat mengarahkan output gdb ke / dev / null jika Anda tidak ingin melihatnya.
sumber
--batch-silent
yang menekan output dan tidak membuang Anda ke konsol gdb jika terjadi kesalahan (mis. Proses yang hilang). BTW,$!
mengacu pada pekerjaan latar belakang terbaru, tapi saya tidak berpikir itu bisa digunakan dalam skrip itu sendiri. Saya menggunakan alias:alias silencebg='silence $!'
Redirect output dari proses yang sedang berjalan ke terminal, file atau layar lain:
Di dalam gdb :
Lepaskan proses yang berjalan dari terminal bash dan biarkan tetap hidup:
Penjelasan:
20818 - hanya contoh dari proses yang berjalan pid
p - cetak hasil dari perintah gdb
tutup (1) - tutup keluaran standar
/ dev / pts / 4 - terminal untuk menulis untuk
ditutup (2) - tutup keluaran kesalahan
/ tmp / myerrlog - file to tulis ke
q - berhenti gdb
bg% 1 - jalankan pekerjaan yang dihentikan 1 pada latar belakang yang
ditolak% 1 - lepas kerja 1 dari terminal
sumber
stdin
(deskriptor file0
) ditutup.p open("/tmp/myerrlog", 2)
?Bukan jawaban langsung untuk pertanyaan Anda, tetapi ini adalah teknik yang menurut saya bermanfaat selama beberapa hari terakhir: Jalankan perintah awal menggunakan 'layar', lalu lepaskan.
sumber
ini adalah bagian skrip bash berdasarkan jawaban sebelumnya, yang mengarahkan file log selama eksekusi proses terbuka, digunakan sebagai postscript dalam
logrotate
prosessumber
https://www.isi.edu/~yuri/dupx/
sumber
Anda dapat menggunakan reredirect ( https://github.com/jerome-pouiller/reredirect/ ).
Tipe
dan output (standar dan kesalahan) akan ditulis dalam FILE.
reredirect README juga menjelaskan cara mengembalikan keadaan proses semula, cara mengarahkan ulang ke perintah lain atau hanya mengarahkan stdout atau stderr.
reredirect
juga menyediakan skrip bernamarelink
yang memungkinkan untuk mengarahkan ulang ke terminal saat ini:(reredirect tampaknya memiliki fitur yang sama dari Dupx yang dijelaskan dalam jawaban lain tetapi, itu tidak tergantung pada Gdb).
sumber