Bagaimana cara menggabungkan stdout dan stderr untuk shell yang berbeda?

18

Saya tahu jawaban untuk beberapa kerang, misalnya dengan cmd.exeAnda dapat:

some.exe > out.txt 2>&1

Bagaimana Anda mencapai hal yang sama untuk shell lain (bash, ksh, tcsh, powershell, dll)?

pesche
sumber

Jawaban:

16

Kulit ikan

Untuk mengarahkan ulang output standar dan kesalahan standar ke file all_output.txt, Anda dapat menulis:

echo Hello > all_output.txt ^&1
Gringo Suave
sumber
3
jika piping output ke perintah selanjutnya, gunakan 2> | sebagai gantinya: echo Hello 2> | kurang
Jeffrey04
Sintaks perpipaan mungkin telah berubah. Kulit ikan saya menggunakan sintaks yang sama "^ & 1" untuk keduanya.
Keith Bentrup
2>&1juga berfungsi - ^pada dasarnya adalah singkatan ikan >2. Perhatikan bahwa 2>| lessatau ^| lessdengan sendirinya pipa hanya stderr; untuk menyalurkan kami dan err, lakukan^&1 | less
Beni Cherniavsky-Paskin
Sintaks singkatan untuk mengarahkan / menyalurkan baik keluar dan salah masih dalam diskusi github.com/fish-shell/fish-shell/issues/110
Beni Cherniavsky-Paskin
5

Untuk csh dan tcsh

some.exec >& out.txt
KeithB
sumber
untuk tcsh, Anda juga harussome.exec |& less
boatcoder
2

Dalam Powershell persis sama:

2> & 1 Mengirim kesalahan ke proses get none, powershell 2> & 1
          aliran keluaran sukses.

(dari about_Redirection).

In bashdan ksh setidaknya saya juga tahu cara kerjanya seperti ini.

Tampaknya menjadi konvensi umum.

Cara cepat untuk mengetahuinya adalah dengan membuka halaman manual shell dan melakukan pencarian &1(dengan /dan kemudian mengetik &1). Ini jarang terjadi dalam konteks lain.

Joey
sumber
2

Dalam bash kamu melakukan hal yang persis sama.

./some_exec > out 2>&1
Bjarke Freund-Hansen
sumber