Vraag Hoe terminal-uitvoer te verbergen bij het uitvoeren van een opdracht?


Wanneer ik bepaalde programma's start vanaf de opdrachtregel, zoals zonsverduistering en documentviewer in 11.10, spuugt het een lading informatie op die onbelangrijk lijkt.

Ook wanneer ze op de achtergrond worden uitgevoerd, blijven ze soms output produceren naar de terminal waar ik momenteel aan werk, wat irritant is.

Ik zou willen dat ze gewoon de achtergrond dingen op de achtergrond lanceren en bewaren. Mijn redenering is dat als je deze programma's via de GUI start (bijv. Dubbelklikken op een pictogram) deze berichten nooit aan mij worden getoond, dus ik heb ze niet nodig op de opdrachtregel.


50
2018-01-25 11:20


oorsprong




antwoorden:


Als u kunt voorkomen dat u dingen schrijft in de console, hangt dit af van de uitvoer van het programma. Als het wordt gestreamd naar standaarduitvoer, dan is het net genoeg om te doen

$ eclipse >/dev/null

en er moet geen uitvoer worden gemaakt.

Om ook foutmeldingen te onderdrukken:

$ eclipse >/dev/null 2>&1

Of gewoon in bash:

$ eclipse &>/dev/null

Maar als ze het op de een of andere manier anders doen, kan het een probleem zijn om te voorkomen dat het in de console wordt geschreven.

gebruik indien mogelijk de oplossing gegeven door MuffinStateWide


67
2018-01-25 12:03



Misschien wil ik dat maken eclipse 2&>1 >/dev/null zich ontdoen van stderr. De standaard leidt alleen omleidingen stdout. En er is geen "andere" manier om het te doen, als je zowel stdout als stderr in de onderlaag spoelt, zal er geen output zijn. - TC1
@ TC1 In principe kan een programma / dev / tty opnieuw worden geopend en de uitvoer daar afdrukken. In de praktijk zullen GUI-programma's dat niet doen. - Random832
@ Random832 Nou, in principe zou ik voorstellen om dat stderr naar / dev / dsp of aplay voor extra lulz te sturen ... :) Maar je hebt gelijk, in theorie zou het in de praktijk gedaan kunnen worden - ik zou waarschijnlijk bij Schrijf tenminste een nogal onbeleefde e-mail aan de man die dat heeft gedaan. - TC1
@ TC1 "2> & 1> / dev / null" zal stdout omleiden naar de bit-bucket, maar stderr zal niet worden omgeleid. U moet de volgorde omkeren en doen: "> / dev / null 2> & 1" - William Pursell
je kunt ook gewoon doen: eclipse &> /dev/null. Dat vangt zowel stdin als stderr naar het omleidingspunt (in bash) - warren


U kunt een bash-functie maken die een alias van de opdracht een naam geeft en wat extra functionaliteit toevoegt om te bereiken waar u om vraagt.

Bijvoorbeeld: laten we zeggen dat je wilt starten gvim (een gui-teksteditor) vanaf de opdrachtregel.

je zou een functie als deze kunnen schrijven:

function gvim () {
    nohup gvim "$@" > /dev/null 2>&1 & disown
}

(voeg deze functie toe aan uw .bashrc of .bash_aliases bestand zodat het altijd wordt geladen)

Uitleg:

  • dit zal de alias zijn gvim commando met een bash-functie ook genoemd gvim (dus als je typt gvim bij een bash-prompt belt het jouw gvim functie, in plaats van het echte uit te voeren gvim opdracht. Jouw functie roept dan het echte gvim commando (en accepteert de reguliere args), met enkele extra functies:

    • stuurt stdout en stderr door naar /dev/null (onderdrukt de uitvoer naar de terminal)
    • toepassingen & om de opdracht op de achtergrond uit te voeren (zodat uw shell niet is geblokkeerd)
    • toepassingen disown om de achtergrondtaak uit de shell te verwijderen (zodat deze niet in de lijst met actieve taken verschijnt)
    • toepassingen nohup om het proces los te koppelen van de terminal (zodat u uw shell-sessie kunt beëindigen of uw terminal kunt sluiten zonder het proces te doden)

7
2018-02-16 16:20



trouwens, ik denk dat dit een meer omvattende oplossing is dan het geaccepteerde antwoord van @Misery - Corey Goldberg


probeer het toevoegen van --help als een commandoschakelaar en zoek naar "stil", dit zou de uitvoer moeten onderdrukken, of gewoon starten vanuit de GUI. en start met de schakelaar of vind een manier om het via script te onderdrukken

persoonlijk lanceer ik vanuit cli om die output te krijgen, dus ik weet niet zeker of het mogelijk is voor alle GUI-apps.


5
2018-01-25 12:06