19Aug
Ако сте заузети човек, онда је последња ствар коју требате да узнемирите огромну количину "бескорисних" обавештења, па како помирите ствари?Данашњи СуперУсер К & амп; Пост има неке сјајне одговоре који помажу читаоцу да умањи количину излаза.
Данашње питање & амп;Сесија одговора долази нам захваљујући СуперУсер-у подскупу Стацк Екцханге-а, заједничком групом К & амп; А веб страница.
Питање
СуперУсер читач Ксстер жели да зна како да покрене команду у позадини без излаза, осим уколико постоји грешка:
Како да потиснете излаз команде, али покажите да ли је излаз из наредбе грешка?
Како добијате команду за покретање у позадини без излаза уколико не дође до грешке?
Одговорност
СуперУсер сарадници Боб и Макимиллиан Лаумеистер имају одговор за нас.Прво горе, Боб:
Нажалост, претпоставка да се стдерр користи само за излазне грешке није увек тачна.Уместо тога, стдерр се често користи за било који и за све интерактивне излазе и дијагностику( тј. Излаз који је намењен кориснику да прочита у интерактивном позиву).( 1) вгет и дд су добро познати примери.
Неке команде ће обезбедити заставу( тј. -звучно или -силент ) за потискивање излаза без грешке.Прочитајте њихове манне странице да бисте видели да ли постоји.
Друга конвенција која чешће држи је излазни код , програм враћа излазни код када изађе.Типично ( 2) , излазни код 0 означава успех, а сваки други излазни код означава грешку.
Са басх , можете добити излазни код последње команде из $? варијабла.У риби , користите $ статус варијаблу.Можете стати стдерр у привремену датотеку и само га одштампати ако дође до грешке.На пример( риба ):
Такође можете користити неке пречице ако нисте ланчане наредбе:
Или:
Такође можете да усмерите стдоут у исти бафер помоћу 2 & гт; & амп; 1 & гт;/tmp/ оутпутбуффер .
( Напомена: Ја заправо не знам рибу , тако да прилагодјавам концепт на оно што могу наћи у својој документацији. Синтакса може бити нешто погрешно. Такође, можете користити мктемп да бисте генерирали јединствени привременидатотеку. Покрените је и запишите име датотеке у варијаблу.)
Ако вам је потребно за покретање читаве ствари у позадини љуске коју истовремено користите у интеракцији, онда је боље написати писање за руковањеизлаз-скривање и покретање тог скрипта у позадини са стандардним техникама( фисх ).Хецк, можете ставити нешто слично следећој функцији у ~ /.config/fish/ цонфиг.фисх :
Позив са рун-силент сомецомманд & амп;( где и заостаје за позадином)
Имајте на уму да ће ово проузроковати изворни код за излаз и смањити оба стдоут и стдерр у случају квара.Можете га прилагодити по потреби.
( 1) Не постоји гаранција да се грешка неће приказати на стдоут , неки програми ће испуштати све излазе тамо!
(2) Нажалост, ово није увек случај.Излазни код је у потпуности контролисан програмом, а неки ће указати на неке услове за успех са нултим излазима.Поново проверите приручник.
Следи одговор Макимиллиан Лаумеистер:
Уник утилитиес пошаљу генералне поруке стдоут и поруке о грешци стдерр , тако да ако само желимо видјети поруке о грешци, онда ће бити довољно да се затвори стдоут тако дасамо стдерр добија излаз на конзолу.
Начин да се то уради( у оба басх и риба ) је да додате & гт;/dev/ нулл у команду.Ово цеви стдоут у ничу, али стдерр ( са вашим порукама о грешци) и даље пролази кроз конзолу.
На пример:
Команда ецхо 1 & гт;/dev/ нулл не штампа ништа, јер је нормалан стдоут излаз супримиран, а ништа није написано стдерр .
Команда човек доеснотекист & гт;/dev/ нулл одштампа поруку о грешци, јер човјек пише своју поруку о грешци стдерр .
Имате ли нешто да додате објашњењу?Звучи у коментарима.Желите да прочитате више одговора од других корисничких корисника Стацк Екцханге?Овде погледајте комплетну тему.