Mengapa output dari beberapa program Linux tidak menuju ke STDOUT atau STDERR?
Sebenarnya, saya ingin tahu cara menangkap semua hasil program dengan andal, apa pun 'aliran' yang digunakannya. Masalah yang saya miliki adalah bahwa beberapa program tampaknya tidak membiarkan keluarannya ditangkap.
Contohnya adalah perintah 'waktu':
time sleep 1 2>&1 > /dev/null
real 0m1.003s
user 0m0.000s
sys 0m0.000s
atau
time sleep 1 &> /dev/null
real 0m1.003s
user 0m0.000s
sys 0m0.000s
Mengapa saya melihat output dua kali? Saya berharap semuanya bisa disalurkan ke / dev / null .
Aliran keluaran apa yang digunakan waktu, dan bagaimana saya bisa mengirimnya ke file?
Salah satu cara untuk mengatasi masalah adalah dengan membuat skrip Bash , misalnya, yang combine.sh
berisi perintah ini:
$@ 2>&1
Maka output dari 'waktu' dapat ditangkap dengan cara yang benar:
combine.sh time sleep 1 &> /dev/null
(tidak ada output terlihat - benar)
Apakah ada cara untuk mencapai apa yang saya inginkan tanpa menggunakan skrip gabungan terpisah?
2>&1 > /dev/null
berarti "2 sekarang pergi ke tempat 1 pergi (yaitu, terminal, secara default), dan kemudian 1 sekarang pergi ke / dev / null (tetapi 2 masih pergi ke terminal!). digunakan>/dev/null 2>&1
untuk mengatakan "1 pergi sekarang ke / dev / null, lalu 2 pergi ke tempat 1 pergi (yaitu, juga ke / dev / null). Ini masih tidak akan berfungsi di sini karena 'waktu' bawaan tidak akan diarahkan, tetapi secara umum lebih benar (misalnya itu akan berfungsi jika Anda menggunakan / usr / bin / waktu). Pikirkan tentang "2> & 1" sebagai menyalin "arah" 1 ke dalam 2, bukan sebagai 2 menuju 1