Saya ingin menjalankan time
perintah untuk mengukur waktu beberapa perintah.
Yang ingin saya lakukan adalah:
- Ukur waktu berlari mereka semua ditambahkan bersama-sama
- Tulis
time
output ke file - Tulis
STDERR
dari perintah yang saya ukurSTDERR
Apa yang saya tidak ingin lakukan adalah
- Tulis beberapa perintah ke dalam skrip terpisah (mengapa? Karena semua ini sudah menjadi skrip yang saya hasilkan secara terprogram, dan membuat skrip temporer LAIN akan lebih berantakan daripada yang saya inginkan)
Apa yang saya coba sejauh ini:
/usr/bin/time --output=outtime -p echo "a"; echo "b";
Tidak berfungsi, time
dijalankan hanya pada yang pertama.
/usr/bin/time --output=outtime -p ( echo "a"; echo "b"; )
Tidak berfungsi, (
adalah token yang tidak terduga.
/usr/bin/time --output=outtime -p { echo "a"; echo "b"; }
Tidak berfungsi, "tidak ada file atau direktori seperti itu".
/usr/bin/time --output=outtime -p ' echo "a"; echo "b";'
Tidak berfungsi, "tidak ada file atau direktori seperti itu".
time ( echo "a"; echo "b"; ) 2>outtime
Tidak berfungsi, karena mengalihkan semua STDERR
ke outtime
; Saya hanya ingin time
output di sana.
Dan tentu saja,
time --output=outime echo "a";
Sejak itu tidak berfungsi --output=outime: command not found
.
Bagaimana saya bisa melakukannya?
sumber
time -p sh -c 'echo "a"; echo "b"'
Coba ini:
Penjelasan:
Pertama, kita harus menemukan cara untuk mengarahkan ulang output dari
time
. Karenatime
shell adalah builtin, dibutuhkan baris perintah penuh sebagai perintah yang akan diukur, termasuk pengalihan. Jadi,[Catatan: komentar janos menyiratkan ini bukan kasus untuk
bash
.] Kita dapat mencapai redirection daritime
output dengan menjalankantime
dalam subkulit dan kemudian mengarahkan output dari subkulit itu.Sekarang kita telah berhasil mengalihkan keluaran
time
, tetapi keluarannya dicampur dengan keluaran kesalahan dari perintah yang kita ukur. Untuk memisahkan keduanya, kami menggunakan deskriptor file tambahan.Di "luar" yang kita miliki
Ini berarti: apa pun yang ditulis ke file descriptor 3, akan di-output ke file deskriptor 2 tempat yang sama (standard error) sedang menghasilkan sekarang (terminal). Dan kemudian kita mengarahkan kesalahan standar ke file
timeout
.Jadi sekarang kita punya: semuanya ditulis ke stdout dan fd 3 akan pergi ke terminal, dan semua yang ditulis ke stderr akan pergi ke file. Yang tersisa adalah mengarahkan ulang stderr perintah terukur ke fd 3.
Sekarang, untuk membuat waktu mengukur lebih dari satu perintah, kita perlu menjalankannya dalam subkulit (lainnya!) (Di dalam tanda kurung). Dan untuk mengarahkan output kesalahan dari semuanya ke fd 3, kita perlu mengelompokkannya di dalam kurung keriting.
Jadi, akhirnya, kami tiba di:
Itu dia.
sumber
Bukan jawaban yang benar tetapi sangat terkait dengan pertanyaan itu.
Diperlukan statistik waktu untuk beberapa program tanda kurung gabungan. Pisahkan perintah dengan titik koma.
sumber
time ( command1 && command2 )
jika perintah pertama gagal; itu tidak akan melanjutkan untuk mengeksekusi yang lain.