Saya memiliki program yang menampilkan ke stdout dan ingin membungkam keluaran itu dalam skrip Bash sambil memipis ke file.
Misalnya, menjalankan program akan menampilkan:
% myprogram
% WELCOME TO MY PROGRAM
% Done.
Saya ingin skrip berikut tidak menampilkan apa pun ke terminal:
#!/bin/bash
myprogram > sample.s
Jawaban:
Jika output ke stderr juga Anda ingin membungkamnya. Anda dapat melakukannya dengan mengarahkan file deskriptor 2:
sumber
&>
jauh lebih tua daripada bash 4.&>
pengantar dokumentasi changelog ? : o>>&
diperkenalkan pada 4.0. Tidak disebutkan&>
tetapi PERUBAHAN hanya kembali ke 2.0 jadi saya pikir itu berarti sudah di 1.x.git blame
padaredir.c
poin ke komit 1998 untuk kejadian tertua masih dalam basis kode saat ini.Redirect stderr ke stdout
Ini akan mengarahkan stderr (yang merupakan deskriptor 2) ke file deskriptor 1 yang merupakan stdout.
Redirect stdout ke File
Sekarang ketika melakukan ini, Anda mengarahkan stdout ke file
sample.s
Redirect stderr dan stdout ke File
Menggabungkan dua perintah akan menghasilkan pengalihan stderr dan stdout ke sample.s
Arahkan ulang stderr dan stdout ke / dev / null
Arahkan ke
/dev/null
jika Anda ingin benar-benar mematikan aplikasi Anda.sumber
myprogram >/dev/null 2>&1
(perhatikan irisan sebelum/dev/null
dan urutan pengalihan).myprogram &>/dev/null
akan cukup?Semua output:
Portabel:
Portabel:
Untuk pesta yang lebih baru (tidak portabel):
sumber
-
dan&>
merupakan ekstensi bourne shell non-portabel.echo moo 1>&-
menghasilkan kesalahan karena file descriptor 1 ditutup:-bash: echo: write error: Bad file descriptor
Jika Anda ingin STDOUT dan STDERR [semuanya], maka cara paling sederhana adalah:
kemudian jalankan seperti
./script
, dan Anda tidak akan mendapatkan output ke terminal Anda. :)"> &" berarti STDERR dan STDOUT. yang
&
juga bekerja dengan cara yang sama dengan pipa:./script |& sed
yang akan mengirimkan segalanya untuk sedsumber
a 2>&1 | b 2>&1 | c
Jika Anda masih kesulitan untuk menemukan jawaban, khususnya jika Anda menghasilkan file untuk output, dan Anda lebih suka alternatif yang jelas:
echo "hi" | grep "use this hack to hide the oputut :) "
sumber
Coba dengan:
untuk tidak mendapatkan output
sumber
Catatan: Jawaban ini terkait dengan pertanyaan "Cara mematikan gema saat menjalankan shell script Linux" yang pada gilirannya ditandai sebagai duplikat untuk yang ini.
Untuk benar-benar mematikan gema perintahnya adalah:
(Ini, misalnya; ketika Anda ingin memasukkan kata sandi dan Anda tidak ingin itu bisa dibaca. Ingat untuk mengaktifkan gema di akhir skrip Anda, jika orang yang menjalankan skrip Anda tidak akan melihat apa yang dia / Dia mengetik sejak saat itu. Untuk menghidupkan gema saat dijalankan:
sumber
Berguna dalam skrip:
Dapatkan hanya STDERR dalam file, sambil menyembunyikan STDOUT apa pun meskipun program untuk menyembunyikan tidak ada sama sekali (tidak pernah menggantung skrip induk), ini saja berfungsi:
Lepaskan sepenuhnya dan tutup mulut semuanya, bahkan membunuh skrip induk tidak akan dibatalkan
./prog
:sumber
Untuk output hanya pada kesalahan :
sumber