Kaip aš galiu nukreipti ir pridėti stdout ir stderr į failą su bash?

Jei norite nukreipti stdout į sutrumpintą failą bash, aš žinau, ką naudoti:

 cmd > file.txt 

Jei norite nukreipti stdout į bash, pridėdami prie failo, aš žinau, ką naudoti:

 cmd >> file.txt 

Jei norite nukreipti stdout ir stderr į sutrumpintą failą, aš žinau, ką naudoti:

 cmd  file.txt 

Kaip nukreipti stdout ir stderr failus į failą? cmd file.txt man neveikė.

1182
18 мая '09 в 7:19 2009-05-18 07:19 „flybywire “ nustatoma gegužės 18 d ., 07:19, 2009-05-18 07:19
@ 6 atsakymai
 cmd >>file.txt 2>> 

Bash peradresuoja iš kairės į dešinę taip:

  • >>file.txt : atidarykite file.txt režime ir nukreipkite stdout ten.
  • 2>> : peradresuokite stderr į „kur stdout šiuo metu vyksta“. Tokiu atveju tai yra failas, atidarytas pridedamame režime. Kitaip tariant, > pakartotinai naudoja failų deskriptorių, kuris šiuo metu naudoja stdout .
1559
18 мая '09 в 7:23 2009-05-18 07:23 atsakė Alex Martelli gegužės 18 d., 07:23, 2009-05-18 07:23

Tai galima padaryti dviem būdais, priklausomai nuo jūsų „bash“ versijos.

Klasikinis ir nešiojamas ( Bash pre-4 ) režimas:

 cmd >> outfile 2>> 

Nepatvirtintas kelias pradedant nuo Bash 4 ,

 cmd  outfile 

(analoginis outfile )

border=0

Norint gauti gerą kodavimo stilių, turėtumėte

  • nuspręsti, ar perkeliamumas yra problema (tada naudokite klasikinį metodą)
  • nuspręskite, ar perkeliamumas yra net iki 4-osios bazinės problemos (tada naudokite klasikinį metodą).
  • Nesvarbu, kokią sintaksę naudojate, nekeiskite to paties scenarijaus (painiavos!)

Jei jūsų scenarijus jau prasideda #!/bin/sh (neatsižvelgiant į tai, ar jis skirtas, ar ne), tada sprendimas „Bash 4“ ir apskritai bet koks „Bash“ specialusis kodas netelpa.

Taip pat nepamirškite, kad „Bash 4 > yra tik trumpesnė sintaksė - ji nepateikia jokių naujų funkcijų ar panašių.

Sintaksė (be kitos peradresavimo sintaksės), aprašyta čia, yra http://bash-hackers.org/wiki/doku.php/syntax/redirection#appending_redirected_output_and_error_output

298
18 мая '09 в 7:42 2009-05-18 07:42 Atsakymą pateikė „ TheBonsai “ gegužės 18 d. 07:42 2009-05-18 07:42

Be „Bash“ taip pat galite aiškiai nurodyti nukreipimus į skirtingus failus:

 cmd >log.out 2>log_error.out 

Įrašyta:

 cmd >>log.out 2>>log_error.out 
76
24 июля '13 в 21:09 2013-07-24 21:09 atsakymą pateikė Aaronas R. Liepos 24 d., 13 val., 21:09 2013-07-24 21:09

Bash 4 (ir ZSH 4.3.11):

 cmd > 

tiesiog iš lauko

57
27 марта '12 в 21:24 2012-03-27 21:24 atsakymas pateikiamas AB kovo 27 d. 12 val. 21:24 2012-03-27 21:24

Tai turėtų veikti gerai:

 your_command 2> | tee -a file.txt 

Jis išsaugos visus žurnalus faile file.txt ir juos iškelia į terminalą.

32
12 дек. Atsakymą pateikė „ Pradeep Goswami “ gruodžio 12 d. 2015-12-12 09:17 '15 at 9:17 2015-12-12 09:17

Išbandykite

 You_command 1>output.log 2>> 

Failo naudojimas>> x.file veikia bash4. Atsiprašome už tai: (

Štai keletas papildomų patarimų.

0, 1, 2 ... 9 - failų aprašai bash.

0 reiškia stdin , 1 - stdout , 2 - stderror . 3 ~ 9 yra atsarginis bet kuriam kitam laikinam naudojimui.

Bet kokį failų deskriptorių galima nukreipti į kitą failų deskriptorių arba failą naudojant > arba >> (add) operatorių.

Naudojimas: < file_descriptor >> < filename file_descriptor >

Žr. Http://www.tldp.org/LDP/abs/html/io-redirection.html.

19
10 апр. Atsakymas pateikiamas Quintus.Zhou 10 Bal. 2014-04-10 08:56 '14 at 8:56 2014-04-10 08:56

Kiti klausimai apie „ žymių arba „ Klauskite“