Homepage » hogyan kell » Hogyan futtathat parancsot a háttérben, nincs kimenet, hacsak nincs hiba?

    Hogyan futtathat parancsot a háttérben, nincs kimenet, hacsak nincs hiba?

    Ha elfoglalt személy vagy, akkor az utolsó dolog, amire szükséged van, hogy hatalmas mennyiségű "haszontalan" értesítéssel zavarjon, így hogyan lelassítod a dolgokat? A mai SuperUser Q&A posztnak nagyszerű válaszai vannak, amelyek segítenek az olvasónak, hogy lelassítsa a kimenet mennyiségét.

    A mai Kérdések és válaszok munkamenet a Jóvagyon - a Stack Exchange alosztályának, a közösség által vezérelt Q&A webhelyek csoportjának köszönhetően..

    A kérdés

    A SuperUser olvasó Xster szeretné tudni, hogyan kell futtatni egy parancsot a háttérben, ha nincs hiba:

    Hogyan utasíthatja el a parancs kimenetét, de mutassa meg, ha a parancs kilépési kódjai hibásak?

    Hogyan kap egy parancsot a háttérben futó futtatás nélkül, hacsak nincs hiba?

    A válasz

    A SuperUser közreműködői Bob és Maximillian Laumeister válaszolnak számunkra. Először fel, Bob:

    Sajnos, az a feltételezés, hogy stderr csak a hibakimenetnél használatos, nem mindig helyes. Inkább, stderr gyakran használják minden és minden interaktív kimenethez és diagnosztikához (azaz olyan kimenethez, amelyet a felhasználó egy interaktív üzenetben olvashat).(1) wget és dd jól ismert példák.

    Egyes parancsok jelzést adnak (azaz a. -csendes vagy -csendes) a nem hiba kimenet elnyomása. Olvassa el a man oldalakat, hogy lássa, van-e ilyen.

    Egy másik, gyakrabban megtartott egyezmény a kilépési kód, egy program kilépési kódot ad vissza, amikor kilép. tipikusan(2), kilépési kód 0 jelzi a sikert, és bármely más kilépési kód hibát jelez.

    Val vel bash, az utolsó parancs kimeneti kódját a $? változó. Ban ben hal, használja a $ status változó. Lehet cső stderr ideiglenes fájlba, és csak akkor kerül nyomtatásra, ha hiba történik. Például (hal):

    Néhány parancsikont akkor is használhat, ha nem parancsolja a parancsokat:

    Vagy:

    Ön is cső stdout ugyanazt a puffert használva 2> & 1> / tmp / kimeneti puffer.

    (Jegyzet: Nem tudom hal, így a koncepciót a dokumentációmban található dolgokhoz igazítom. A szintaxis kissé rossz. Használhatja azt is mktemp egyedi ideiglenes fájl létrehozásához. Futtassa és rögzítse a fájl nevét egy változóban.)

    Ha az egészet futtatni kell egy olyan shell hátterében, amelyet egyidejűleg interaktívan is használ, akkor jobb, ha írsz egy parancsfájlt a kimeneti elrejtés kezeléséhez és a parancsfájl futtatásához a háttérben a szokásos technikákkal (hal). Heck, akkor beilleszthetünk valamit, mint a következő funkció ~ / .Config / hal / config.fish:

    Hívd fel néha csendes (ahol a hát & a háttérben fut)

    Ne feledje, hogy ez lenyeli az eredeti kilépési kódot, és mindkettőt eldobja stdout és stderr meghibásodás esetén. Szükség szerint testre szabhatja.

    (1) Nincs garancia arra, hogy a hiba kimenete nem jelenik meg stdout, egyes programok az összes kimenetet eldobják!

    (2) Sajnos ez még mindig nem így van. A kilépési kódot a program teljesen ellenőrzi, és néhányan jeleznek néhány sikeres feltételet a nem nulla kilépésekkel. Ismét ellenőrizze a kézikönyvet.

    Ezt követi a válasz: Maximillian Laumeister:

    A Unix segédprogramok általános üzeneteket küldnek stdout, és hibaüzenetek stderr, így ha csak hibaüzeneteket akarunk látni, akkor elegendő lesz elnyomni stdout így csak stderr a kimenet a konzolra kerül.

    Ennek módja (mindkettőben bash és hal) hozzá kell adni > / Dev / null a parancshoz. Ez a csövek stdout semmibe, de stderr (a hibaüzenetekkel együtt) még mindig a konzolra jut.

    Így például:

    A parancs echo 1> / dev / null semmit sem nyomtat, mert a normális stdout a kimenet el van nyomva, és semmit sem írtak stderr.

    A parancs az ember doesnotexist> / dev / null kinyomtat egy hibaüzenetet, mert Férfi írja a hibaüzenetet stderr.


    Van valami, amit hozzá kell adni a magyarázathoz? Kikapcsolja a megjegyzéseket. Szeretne további válaszokat olvasni más tech-savvy Stack Exchange felhasználóktól? Nézze meg a teljes beszélgetés szálát itt.