I-redirect ang stdout at stderr sa File

Redirect Stdout Stderr File



Kapag na-redirect mo ang anumang output ng utos sa isang file, mapapansin mo na ang mga mensahe ng error ay naka-print sa window ng terminal. Ang anumang utos na naisakatuparan sa anumang Linux shell, tulad ng bash, ay gumagamit ng tatlong regular na I / O na stream. Ginagamit ang isang deskriptor ng numerong file upang kumatawan sa bawat stream.

  • Ang karaniwang input stream (stdin): 0
  • Ang karaniwang output stream (stdout): 1
  • Ang karaniwang error stream (stderr): 2

Sa post na ito, maaunawaan namin ang impormasyong dumarating sa ilalim ng pag-redirect ng stdout at stderr upang mag-file.







Karaniwang output (stdout):

Ang bawat operating system batay sa Linux ay may paniniwala ng isang default na lugar para sa naipatupad na utos. Ang bawat isa ay tumutukoy sa paniwala na ito bilang stdout o karaniwang output upang gawing mas madali itong tunog. Ang iyong Bash o Zsh shell ay patuloy na naghahanap para sa default na lokasyon ng output. Kapag nakita ng shell ang bagong output, ipinapakita ito sa terminal screen upang makita mo ito. Kung hindi man, ipapadala nito ang output sa default na lokasyon.



Karaniwang error (stderr):

Ang karaniwang error o stderr ay katulad ng karaniwang input at output, ngunit ginagamit ito para sa pagtatago ng mga mensahe ng error. Ang karaniwang error ay maaaring ilipat sa linya ng utos o isang file gamit ang isang terminal. Kung nais mong i-record o iimbak ang mga mensahe sa isang hiwalay na file ng log o itago ang mga mensahe ng error, makakatulong sa iyo ang pag-redirect ng stderr. Tumungo tayo patungo sa praktikal na bahagi ng pag-redirect ng stdout at stderr.



Pagdirekta ng stdout at stderr sa isang file:

Tulad ng pag-redirect ay isang paraan ng pagkuha ng isang output ng programa at pagpapadala nito bilang isang input sa isa pang utos o file. Ang I / O stream ay maaaring mai-redirect sa pamamagitan ng paglalagay ng n> operator na ginagamit, kung saan n ang numero ng tagapaglarawan ng file. Para sa pag-redirect ng stdout, gumagamit kami ng 1> at para sa stderr, idinagdag ang 2> bilang isang operator.





Lumikha kami ng isang file na pinangalanang sample.txt upang maiimbak ang nai-redirect na output sa aming kasalukuyang direktoryo.



Ang (command> file) ay isinasaalang-alang bilang klasikong operator ng pag-redirect na nagre-redirect lamang sa karaniwang output na may karaniwang error na ipinakita sa terminal. Ipapakita namin ang iba't ibang mga pagpipilian upang i-redirect din ang stderr.

Pag-redirect ng stderr at stdout upang paghiwalayin ang mga file:

Nasa ibaba ang command syntax para sa pag-redirect ng stdout at stderr upang paghiwalayin ang mga file.

utos >palabas2>kamalian

Ang utos na ibinigay sa ibaba ay ire-redirect ang output sa out file at mga mensahe ng error sa error file.

$pusasample.txt>palabas2>kamalian

Pag-redirect sa stderr sa stdout:

Ito ay isang pangkaraniwang kasanayan upang i-redirect ang stderr na may karaniwang output ng isang programa upang maiimbak ang lahat sa isang solong file. Narito ang utos na utos para sa pag-redirect ng stderr sa stdout:

utos >palabas2> &1$ls >samplefile.txt2> &1

$pusasamplefile.txt

> ang pag-redirect ng redirect sa stdout sa samplefile.txt, at ire-redirect ng 2> & 1 ang stderr sa kasalukuyang lokasyon ng stdout.

Kung ang stderr ay nai-redirect sa stdout muna, gamitin ang ibinigay na utos sa ibaba upang i-redirect ang stdout sa isang file.

utos 2> &1 > file$ls -sa 2> &1 >samplefile.txt

$pusasamplefile.txt

Ginagamit din ang &> para sa parehong pag-andar na gampanan ng>> & 1.

utos &> file$ls &>samplefile.txt

$pusasamplefile.txt

Pag-redirect ng stdout at stderr sa isang solong file:

Ang lahat ng mga shell ay hindi sumusuporta sa pag-redirect ng form na ito, ngunit sinusuportahan ito ng bash at Zsh. Maaaring mai-redirect ang stdout at stderr sa pamamagitan ng paggamit ng sumusunod na syntax.

utos &>palabas$pusasample.txt&>palabas

Sa paparating na seksyon ng artikulo, susuriin namin ang magkakahiwalay na halimbawa para sa pag-redirect ng stdout at stderr.

Pag-redirect sa stdout sa isang file:

Ang karaniwang output ay kinakatawan ng 1 sa listahan ng mga numero ng deskriptor ng file. Para sa pag-redirect ng utos nang walang anumang numero ng tagapaglarawan ng file, itinakda ng terminal ang halaga nito sa 1. Ang syntax para sa pag-redirect ng stdout sa isang file ay ibinigay bilang sumusunod:

utos > file

Gumagamit kami ng sample.file para sa pagtatago ng karaniwang output ng ls -al na utos

$ls -sa >sample.txt

$pusasample.txt

utos 1> file$ls 1>sample.txt

$pusasample.txt

Pagdirekta ng stderr sa isang file:

Gamitin ang 2> operator para sa pag-redirect ng stderr sa isang file.

utos 2> file $ls -sa 2>sample.txt

Maaari naming pagsamahin ang pagpapatupad para sa stderr at stdout sa isang solong utos ng pag-redirect.

utos 2>error.txt1>output.txt

Sa halimbawa na ibinigay sa ibaba, ang mga mensahe ng error ay maiimbak sa error.txt, kung saan ang output.txt ay magkakaroon ng karaniwang output ng ls command.

$ls 2>error.txt1>output.txt

$pusaoutput.txt

Konklusyon:

Ang pagkakaroon ng konsepto ng pag-redirect at paglalarawan ng file para sa I / O na mga stream ay napakahalaga habang nagtatrabaho sa isang terminal ng Linux. Sa post na ito, napag-usapan namin ang tungkol sa regular na I / O na mga stream, kasama ang stdout at stderr. Ang unang seksyon ng post na ito ay magdudulot sa iyo ng detalyadong impormasyon tungkol sa pag-redirect, mga I / O stream, at ang deskriptor ng numerong file. Susunod, nakita mo ang praktikal na halimbawa para sa iba't ibang anyo ng pag-redirect ng stdout at stderr.