Шта су стдин, стдерр и стдоут у Басху

What Are Stdin Stderr



Кад год покренете било коју команду у терминалу, стдин , стдерр , и стдоут су три тока података које басх ствара. Ако сте упознати са командном линијом, можда сте већ искористили ове функције. У суштини, они дозвољавају пренос/преусмеравање података из једне команде у другу.

Хајде да проверимо како стдин , стдерр , и стдоут ради и како их можете користити.







стдин, стдоут и стдерр

У рачунарству, термин ток се односи на нешто што може пренети податке. Овде сва три тока носе текст као податке.



Слично као и водени токови, токови података такође имају две крајње тачке. Постоје извор и одлив. Коју год команду покренете на терминалу биће на било којој тачки тока. Помоћу тока можете повезати два терминала, две различите команде, па чак и датотеке!



Хајде да брзо разложимо посебне токове.





  • стдин: Означава стандардни улаз. За унос је потребан текст.
  • стдоут: Означава стандардни излаз. Текстуални излаз наредбе је ускладиштен у стдоут стреам -у.
  • стдерр: Означава стандардну грешку. Кад год се команда суочи са грешком, порука о грешци се чува у овом току.

У Линуку се готово сви токови третирају као да су датотеке. Баш као што можете читати/писати датотеку, можете читати/писати податке из ових токова.

Лак начин за приступ било којој датотеци је коришћењем јединственог броја дескриптора датотеке који је повезан са њом. У случају ових токова, сваком од њих су додељене јединствене вредности.



  • 0: стдин
  • 1: стдоут
  • 2: стдерр

стдин, стдоут и стдерр на делу

Почнимо са учењем више о овим токовима кроз акцију, почећемо са стдин.

Покрените следећу команду.

$читати

Ова команда ће захтевати унос са тастатуре. Овде алат за читање добија улаз из стдин -а. Погледајмо сада стдоут.

Прво покрените команду.

$лс -тхе

Овде команда лс наводи датотеке (датотеке) у тренутном директоријуму. Списак се шаље на адресу стдоут и терминал га штампа. Хајде сада да проверимо стдерр.

До грешке може доћи на различите начине. У овом примеру, слање неважећег аргумента ће довести до грешке.

$лс -тхебило шта

Овде не постоји датотека која се зове било шта. Зато се шаље порука лс Ретурнс стдерр .

Цевоводи

Ово је уобичајена техника која у потпуности користи стдин и стдоут токове. Објаснимо то примером.

$Избацио 'Здраво Свете' | дршкаЗдраво

Овде, | знак је одговоран за цевоводе. Излаз Избацио генерише написано је у стдоут стреам. Затим цевовод преусмерава садржај стдоут -а на стдин за команду греп. Тако греп зна на ком ће садржају извршити операцију.

Ако желите да пренесете и стдерр и стдоут у следећу команду, уместо тога користите | &.

$ИзбациоЗдраво Свете| & мачка

$било шта| & мачка

Преусмеравање токова

Сада знамо како ови токови функционишу, погледајмо како их можете преусмерити. Цевоводи су облик преусмеравања. Међутим, то укључује само стдин и стдоут. Басх омогућава специфичну контролу над сва три тока.

Да бисте преусмерили стдоут садржај у датотеку, додајте> англе и име циљне датотеке.

$ИзбациоЗдраво Свете>хелло.ткт

Овде ће излаз наредбе ецхо бити ускладиштен у датотеци хелло.ткт.

Ако датотека већ постоји, горња команда ће је преписати. Да бисте то избегли, уверите се да је назив датотеке јединствен. Ако не желите да препишете, можда ћете уместо тога желети да користите >>. Додаје излаз на крају циљне датотеке.

$Избацио 'Здраво Свете' >>хелло.ткт

Циљ стдин -а је да ради са улазом. Ово се такође може преусмерити. На пример, уместо да куцате унос са тастатуре, може се учитати из датотеке.

У овој команди, цат ће преузети свој улаз директно из датотеке хелло.ткт.

$мачка <хелло.ткт

Хајде да проверимо преусмеравање на другом примеру. Овај пут ће то укључивати Питхон скрипту.

$# пиин.пи
$ наме= улазни('Унесите име н')
$емаил = улазни('Унесите адресу е -поште н')
$принт('Ваше име је %с, а адреса е -поште је %с'%(име, емаил))

Улаз за скрипту се налази на хелло.ткт.

$мачкахелло.ткт

Пошаљимо датотеку као улаз за скрипту.

$ питхон3 пиин.пи <Здраво.ткт

Занимљиво је да обоје можете преусмерити стдин и стдоут у истој командној линији. Овде ће следећа команда користити хелло.ткт као стдин и пошаљите стдоут наредбе за датотеку.

$ питхон3 пиин.пи <Здраво.ткт >излаз.ткт

Преусмеравање стдерр је слично стдоут -у. Међутим, морате да наведете опис описа 2 за означавање стдерр. У супротном ће користити само стдоут.

Овде ћу преусмерити садржај стдерр у текстуалну датотеку.

$било шта2>еррор.ткт

Преусмеравање Стдоут -а и Стдерр -а

Да, могуће је преусмерити обоје истовремено. Све што требате је да прије преусмјеравања наведете ИД описа 1 и 2.

$ИзбациоЗдраво Свете1>оутпут.лог2>дебуг.лог

Последње мисли

стдин , стдоут , и стдерр су дивне карактеристике које басх подразумевано нуди. Ако волите басх скрипте, њихово коришћење може бити невероватно корисно у незгодним ситуацијама.

Желите да сазнате више о басх скриптирању? Почнимо са овим водич за почетнике за басх скрипт !

Уживати!