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