Jawaban:
Ya itu mungkin, arahkan saja output ke file:
SomeCommand > SomeFile.txt
Atau jika Anda ingin menambahkan data:
SomeCommand >> SomeFile.txt
Jika Anda ingin stderr
juga gunakan ini:
SomeCommand &> SomeFile.txt
atau ini untuk ditambahkan:
SomeCommand &>> SomeFile.txt
jika Anda ingin memiliki keduanya stderr
dan output ditampilkan di konsol dan dalam file gunakan ini:
SomeCommand 2>&1 | tee SomeFile.txt
(Jika Anda ingin output saja, letakkan di 2
atas)
make
perintah ke dalam file itu membutuhkan sintaks ini sebagai gantinya: make > someFile.txt 2>&1
(sumber: linuxquestions.org/questions/linux-newbie-8/… )
Untuk menulis output dari suatu perintah ke file, pada dasarnya ada 10 cara yang umum digunakan.
Harap perhatikan bahwa
n.e.
dalam kolom sintaks berarti "tidak ada".
Ada caranya, tapi terlalu rumit untuk masuk ke dalam kolom. Anda dapat menemukan tautan bermanfaat di bagian Daftar tentang hal itu.
|| visible in terminal || visible in file || existing
Syntax || StdOut | StdErr || StdOut | StdErr || file
==========++==========+==========++==========+==========++===========
> || no | yes || yes | no || overwrite
>> || no | yes || yes | no || append
|| | || | ||
2> || yes | no || no | yes || overwrite
2>> || yes | no || no | yes || append
|| | || | ||
&> || no | no || yes | yes || overwrite
&>> || no | no || yes | yes || append
|| | || | ||
| tee || yes | yes || yes | no || overwrite
| tee -a || yes | yes || yes | no || append
|| | || | ||
n.e. (*) || yes | yes || no | yes || overwrite
n.e. (*) || yes | yes || no | yes || append
|| | || | ||
|& tee || yes | yes || yes | yes || overwrite
|& tee -a || yes | yes || yes | yes || append
command > output.txt
Aliran output standar akan diarahkan ke file saja, itu tidak akan terlihat di terminal. Jika file sudah ada, akan ditimpa.
command >> output.txt
Aliran output standar akan diarahkan ke file saja, itu tidak akan terlihat di terminal. Jika file sudah ada, data baru akan ditambahkan ke akhir file.
command 2> output.txt
Aliran kesalahan standar hanya akan diarahkan ke file, itu tidak akan terlihat di terminal. Jika file sudah ada, akan ditimpa.
command 2>> output.txt
Aliran kesalahan standar hanya akan diarahkan ke file, itu tidak akan terlihat di terminal. Jika file sudah ada, data baru akan ditambahkan ke akhir file.
command &> output.txt
Output standar dan stream kesalahan standar hanya akan diarahkan ke file, tidak ada yang akan terlihat di terminal. Jika file sudah ada, akan ditimpa.
command &>> output.txt
Output standar dan stream kesalahan standar hanya akan diarahkan ke file, tidak ada yang akan terlihat di terminal. Jika file sudah ada, data baru akan ditambahkan ke akhir file ..
command | tee output.txt
Aliran keluaran standar akan disalin ke file, itu masih akan terlihat di terminal. Jika file sudah ada, akan ditimpa.
command | tee -a output.txt
Aliran keluaran standar akan disalin ke file, itu masih akan terlihat di terminal. Jika file sudah ada, data baru akan ditambahkan ke akhir file.
(*)
Bash tidak memiliki sintaks steno yang memungkinkan pemipaan hanya StdErr ke perintah kedua, yang akan diperlukan di sini dalam kombinasi dengan tee
lagi untuk menyelesaikan tabel. Jika Anda benar-benar membutuhkan sesuatu seperti itu, silakan lihat "Cara memasang pipa stderr, dan tidak stdout?" pada Stack Overflow untuk beberapa cara bagaimana hal ini dapat dilakukan misalnya dengan menukar stream atau menggunakan subtitusi proses.
command |& tee output.txt
Output standar dan stream kesalahan standar akan disalin ke file saat masih terlihat di terminal. Jika file sudah ada, akan ditimpa.
command |& tee -a output.txt
Output standar dan stream kesalahan standar akan disalin ke file saat masih terlihat di terminal. Jika file sudah ada, data baru akan ditambahkan ke akhir file.
2>&1
pengalihan STDERR ke STDOUT, 1>&2
pengalihan STDOUT ke STDERR dan 3>&1
akan mengarahkan aliran 3 ke STDERR.
sh: 1: Syntax error: "&" unexpected
ketika saya gunakan |& tee
dari skrip Python di server c9.io. Tampaknya shell yang berbeda sedang digunakan. echo $SHELL
menunjukkan /bin/bash
dan $SHELL --version
menunjukkan versi 4.3.11 (1) -release. Saya mencoba #!/bin/bash
skrip python saya tetapi saya masih dapat sh: 1: Syntax error
. Saya mendapatkan apa yang saya butuhkan jadi saya menyerah untuk menyortir keanehan antara sh
dan bash
di server saya. Terima kasih.
sh
dan tidak bash
(atau mungkin bash
dalam sh
mode ...). Anda dapat memeriksa apa sebenarnya proses shell Anda saat ini digunakan ps -p $$ -o cmd=
, karena echo $SHELL
tidak dapat diandalkan dan akan menunjukkan Anda shell login Anda, mengabaikan apakah Anda mungkin telah memulai subkulit yang berbeda.
Anda juga dapat menggunakan tee
untuk mengirim output ke file:
command | tee ~/outputfile.txt
Sedikit modifikasi akan menangkap stderr juga:
command 2>&1 | tee ~/outputfile.txt
atau sedikit lebih pendek dan tidak terlalu rumit:
command |& tee ~/outputfile.txt
tee
berguna jika Anda ingin dapat menangkap keluaran perintah sambil juga melihatnya langsung .
2>&1
?
Anda dapat mengarahkan output perintah ke file:
your_command >/path/to/file
Untuk menambahkan output perintah ke file alih-alih menimpanya, gunakan:
your_command >>/path/to/file
Peningkatan untuk dipertimbangkan -
Berbagai skrip akan menyuntikkan kode warna ke dalam output yang Anda mungkin tidak ingin mengacaukan file log Anda.
Untuk mengatasinya, Anda dapat menggunakan program sed untuk menghapus kode-kode. Contoh:
command 2>&1 | sed -r 's/'$(echo -e "\033")'\[[0-9]{1,2}(;([0-9]{1,2})?)?[mK]//g' | tee ~/outputfile.txt
ls
dan grep
, dukungan --color=auto
, yang hanya mengeluarkan kode warna jika keluaran standar adalah terminal.
Untuk cron
pekerjaan, dll, Anda ingin menghindari ekstensi Bash. sh
Operator pengalihan POSIX setara adalah
Bash POSIX
------------ --------------
foo &> bar foo >bar 2>&1
foo &>> bar foo >>bar 2>&1
foo |& bar foo 2>&1 | bar
Anda akan melihat bahwa fasilitas POSIX dalam beberapa hal lebih sederhana dan lebih mudah. The &>
sintaks dipinjam dari csh
yang seharusnya sudah meyakinkan Anda bahwa itu adalah ide yang buruk.
some_command | tee command.log
dan some_command > command.log
memiliki masalah bahwa mereka tidak menyimpan output perintah ke command.log
file secara real-time.
Untuk menghindari masalah itu dan menyimpan output perintah secara real-time, Anda dapat menambahkan unbuffer
, yang datang dengan expect
paket.
Contoh:
sudo apt-get install expect
unbuffer some_command | tee command.log
unbuffer some_command > command.log
Dengan asumsi log.py
mengandung:
import time
print('testing')
time.sleep(100) # sleeping for 100 seconds
Anda dapat menjalankan unbuffer python log.py | tee command.log
atauunbuffer python log.py > command.log
Informasi lebih lanjut: Bagaimana saya bisa menyimpan output perintah ke file secara real-time?
someCommand 2> someFile.txt
dansomeCommand 2>> someFile.txt
juga pengalihanstterr
ke someFile.txt