Pertanyaan Bagaimana saya bisa mengarahkan output dari "waktu" perintah?


Saya mencoba untuk mengalihkan output dari perintah waktu, tetapi saya tidak bisa:

$time ls > filename
real    0m0.000s
user    0m0.000s
sys     0m0.000s

Di file saya bisa melihat output dari ls perintah, bukan itu time. Tolong jelaskan, mengapa saya tidak bisa dan bagaimana melakukan ini.


75
2018-03-09 12:32


asal


Jawaban:


Anda dapat mengalihkan output waktu menggunakan,

(time ls) &> file

Karena Anda perlu mengambil (time ls) sebagai satu perintah sehingga Anda dapat menggunakan tanda kurung.


84
2018-03-09 12:34



tidak perlu meluncurkan sub shell. Gunakan blok kode juga akan dilakukan.

{ time ls; } 2> out.txt

atau

{ time ls > /dev/null 2>&1 ; } 2> out.txt

110
2018-03-09 13:14



Waktu perintah mengirimkan hasilnya ke STDERR (bukan STDOUT). Itu karena perintah dieksekusi dengan waktu normal (dalam hal ini ls) output ke STDOUT.

Jika Anda ingin menangkap output waktu, lalu ketik:

(time ls) 2> filename

Yang hanya menangkap output waktu, tetapi output dari ls berjalan normal ke konsol. Jika Anda ingin menangkap keduanya dalam satu file, ketik:

(time ls) &> filename

2> redirects STDERR, &> redirects keduanya.


20
2018-03-09 13:05



waktu adalah shell builtin dan saya tidak yakin apakah ada cara untuk mengalihkannya. Namun Anda bisa menggunakannya /usr/bin/time sebaliknya, yang pasti menerima pengalihan output apa pun.


9
2018-03-09 12:37



Jika Anda tidak ingin mencampur output dari time dan perintahnya. Dengan waktu GNU, Anda dapat menggunakan -o file seperti:

/usr/bin/time -o tim grep -e k /tmp 1>out 2>err

sementara tim adalah keluaran waktu, out dan err adalah stdout dan stderr dari grep.


3
2018-01-13 07:51



Alasan mengapa pengalihan tampaknya tidak berfungsi time adalah bahwa itu kata bash reserved (bukan builtin!) ketika digunakan di depan pipa. bash (1):

Jika kata waktu dicadangkan mendahului saluran pipa, yang berlalu juga   pengguna dan waktu sistem yang dikonsumsi oleh pelaksanaannya dilaporkan ketika   pipeline berakhir.

Jadi, untuk mengarahkan output dari time, baik menggunakan kurung kurawal:

{ time ls; } 2> filename

Atau telepon /usr/bin/time:

/usr/bin/time ls 2> filename

1
2018-03-02 09:38