Saat menjalankan beberapa tes, saya perlu menjalankan serangkaian perintah. Ini akan sangat berguna bagi saya, dan menghemat banyak waktu, jika ada cara untuk melakukan semua hal ini:
- Jalankan perintah yang harus saya jalankan
- Redirect semua output dari perintah ke file yang ditentukan
- Sertakan perintah asli dalam file yang ditentukan
- Cetak output dari perintah asli di terminal
Orang-orang menyarankan menggunakan tee kepada saya yang melakukan pekerjaan mencetak dengan baik ke terminal serta mengirim ke file tetapi tidak termasuk perintah asli. Yang ingin saya akhiri adalah file di mana baris pertama adalah perintah yang saya jalankan, dan kemudian di bawahnya adalah output dari perintah.
Seseorang menyarankan ini:
echo "ls -l" | xargs -I{} bash -c "echo >> output.file; eval {} >> output.file"
Tapi ini tidak bisa mencetak output di terminal atau memasukkan perintah asli dalam file.
Saya menghargai ide apa pun.
command-line
shaneoh
sumber
sumber
tee
.Jawaban:
Itu yang
tee
Anda cari.mencetak output
ls -l
ke stdout (yaitu terminal) dan menyimpannya di fileoutfile
pada saat yang bersamaan. Tetapi : Itu tidak menulis nama perintah untuk stdout atau ke file. Untuk mencapai itu, hanyaecho
nama perintah sebelum menjalankan perintah dan pipa kedua output ketee
:Itu rumit untuk diketik, jadi mengapa tidak mendefinisikan suatu fungsi?
Setelah itu Anda bisa langsung berlari
untuk mendapatkan hasil yang diinginkan. Masukkan fungsi Anda
~/.bashrc
untuk mendefinisikannya di setiap terminal baru.Jika Anda ingin dapat menentukan file output sebagai argumen pertama seperti di
alih-alih membuatnya:
Jika Anda tidak ingin file keluaran ditimpa tetapi ditambahkan, tambahkan
-a
opsi ketee
.sumber
Anda dapat menggunakan
script
perintah yang akan membuat file naskah semua yang dicetak ke terminal Anda. Itu membuat shell bercabang dan akan merekam semuanya sampai shell itu keluar.Maka jika saya
cat my_output
saya mendapatkan output yang sama:sumber
Anda dapat menggunakan fungsi debugging shell bersama dengan
tee
:( ... )
memulai sub-shell yang memungkinkan Anda untuk "mengumpulkan" aliran output dari semua perintah yang dijalankan dalam sub-shell. Ini juga berisi efek dariset
perintah di bawah ini ke sub-shell ini.set -x
mengaktifkanx
opsi shell yang mencetak semua perintah yang dijalankan shell ke aliran kesalahan standar sebelum menjalankannya.2>&1
redirect aliran 2 (kesalahan standar) ke streaming 1 (output standar).|
mengalihkan aliran output standar dari perintah kiri ke aliran input standar dari perintah kanan.tee FILE
menyalin aliran input standar ke fileFILE
dan ke output standar.Jika urutan perintah Anda sudah ada dalam file skrip, akan lebih masuk akal untuk menjalankannya seperti ini:
sumber