GNU/Linux >> Belajar Linux >  >> Linux

Redirect Output Dari Sebuah Perintah Dalam `time Command`?

Saya mencoba mengatur waktu sesuatu menggunakan:

/usr/bin/time myCommand

Namun, sejak /usr/bin/time menulis ke stderr, jika myCommand juga menulis ke stderr, saya akan mendapatkan lebih dari sekadar keluaran waktu di aliran. Yang ingin saya lakukan adalah, redirect semua output myCommand ke /dev/null , tetapi masih menulis output waktu ke stderr. Menggunakan contoh myCommand yang menulis ke stderr dari ls /nofile , kita melihat bahwa (jelas) tidak ada output sama sekali dengan yang berikut:

$ /usr/bin/time ls /nofile 2> /dev/null
$

Tanpa pengalihan apa pun, kami melihat kedua output dari ls (ke stderr) dan output dari waktu (juga ke stderr):

$ /usr/bin/time ls /nofile
ls: cannot access /nofile: No such file or directory
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 3776maxresident)k
0inputs+0outputs (0major+278minor)pagefaults 0swaps

Yang saya inginkan adalah sesuatu yang hanya menghasilkan:

$ /usr/bin/time ls /nofile > RedirectThatImAskingFor
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 3776maxresident)k
0inputs+0outputs (0major+278minor)pagefaults 0swaps

Ada ide?

Jawaban yang Diterima:

Dalam ksh, bash dan zsh, time adalah kata kunci, bukan bawaan. Pengalihan pada baris yang sama hanya berlaku untuk perintah yang diatur waktunya, bukan untuk output time sendiri.

$ time ls -d / /nofile >/dev/null 2>/dev/null

real    0m0.003s
user    0m0.000s
sys     0m0.000s

Untuk mengarahkan ulang output dari time sendiri dalam cangkang ini, Anda perlu menggunakan tingkat pengelompokan tambahan.

{ time mycommand 2>&3; } 3>&2 2>mycommand.time

Jika Anda menggunakan versi GNU dari time yang berdiri sendiri utilitas, ia memiliki -o opsi untuk menulis output time di tempat lain selain stderr. Anda dapat membuat time tulis ke terminal:

/usr/bin/time -o /dev/tty mycommand >/dev/null 2>/dev/null

Jika Anda ingin menyimpan output dari time pada kesalahan standarnya, Anda memerlukan tingkat pengacakan deskriptor file ekstra.

/usr/bin/time -o /dev/fd/3 mycommand 3>&2 >/dev/null 2>/dev/null

Dengan time utilitas, Anda dapat memanggil shell perantara untuk melakukan pengalihan yang diinginkan. Memanggil shell perantara untuk melakukan tindakan ekstra seperti cd , pengalihan, dll. cukup umum — ini adalah hal kecil yang dirancang untuk dilakukan oleh shell.

/usr/bin/time sh -c 'exec mycommand >/dev/null 2>/dev/null'

Linux
  1. Contoh Perintah Waktu Linux

  2. CentOS / RHEL :Cara mendapatkan tanggal dan waktu perintah yang dieksekusi di output perintah history

  3. Bagaimana cara menambahkan output ke file?

  1. Bagaimana cara mengarahkan output dari system() ke file?

  2. Bagaimana cara mengarahkan output dari perintah waktu ke file di Linux?

  3. Output perintah dialihkan ke file dan terminal

  1. Bagaimana cara mengarahkan output dari suatu perintah ke file ketika perintah tersebut akan meminta input pengguna?

  2. Redirect output dari perintah waktu di unix ke dalam variabel di bash?

  3. Sembunyikan output dari perintah shell hanya jika berhasil?