GNU/Linux >> Linux Esercitazione >  >> Linux

Cattura automaticamente l'output dell'ultimo comando in una variabile usando Bash?

Questa è una soluzione davvero confusa, ma sembra funzionare per lo più a volte. Durante i test, ho notato che a volte non funzionava molto bene quando ricevevo un ^C sulla riga di comando, anche se l'ho modificato un po 'per comportarsi un po' meglio.

Questo hack è solo un hack in modalità interattiva e sono abbastanza fiducioso che non lo consiglierei a nessuno. È probabile che i comandi in background causino un comportamento ancora meno definito del normale. Le altre risposte sono un modo migliore per ottenere risultati in modo programmatico.

Detto questo, ecco la "soluzione":

PROMPT_COMMAND='LAST="`cat /tmp/x`"; exec >/dev/tty; exec > >(tee /tmp/x)'

Imposta questa variabile ambientale bash ed emette i comandi come desiderato. $LAST di solito avrà l'output che stai cercando:

startide seth> fortune
Courtship to marriage, as a very witty prologue to a very dull play.
                -- William Congreve
startide seth> echo "$LAST"
Courtship to marriage, as a very witty prologue to a very dull play.
                -- William Congreve

Non conosco alcuna variabile che lo faccia automaticamente . Per fare qualcosa oltre al semplice copia-incolla del risultato, puoi rieseguire qualsiasi cosa tu abbia appena fatto, ad esempio

vim $(!!)

Dove !! è l'espansione della cronologia che significa 'il comando precedente'.

Se ti aspetti che ci sia un singolo nome file con spazi o altri caratteri che potrebbero impedire la corretta analisi degli argomenti, cita il risultato (vim "$(!!)" ). Lasciarlo senza virgolette consentirà l'apertura di più file contemporaneamente purché non includano spazi o altri token di analisi della shell.


Linux
  1. Dividi l'output del comando per colonne usando Bash?

  2. Utilizzo dell'output dei comandi precedenti in bash

  3. In bash, c'è un modo per echo/stampare l'ultimo stdout? Esiste una variabile a cui è assegnato stdout?

  4. Il reindirizzamento dell'output del comando a una variabile in bash non riesce

  5. passando grep in una variabile in bash

Tutorial sull'utilizzo dell'ultimo comando nel terminale Linux

Utilizzo del comando Linux Basename negli script Bash

Utilizzo del comando Linux Dirname negli script Bash

Bash cattura l'output di awk nell'array

Codice di uscita dall'assegnazione della variabile alla sostituzione dei comandi in Bash

Reindirizzare l'output del comando time in unix in una variabile in bash?