2016-01-15 12 views
6

Ho uno script Bash che restituisce un comando. Vorrei eseguire lo script e lasciare che stampi automaticamente il risultato dietro il prompt nella riga successiva. Anche sostituire la chiamata di script nella riga corrente sarebbe un'opzione. In questo modo ho potuto modificare il comando prima di eseguirlo. Questo può essere ottenuto all'interno di un terminale con Bash?Stampa risultato di script bash dietro prompt nella riga successiva

+2

Come facile da implementare alternativa a questo comportamento, si potrebbe aprire un editor che contiene il comando e quindi fonte il file modificato : 'trap 'rm -f -" $ cmd_file "' ESCI; cmd_file = $ (mktemp); printf% s \\ n "$ command"> "$ cmd_file"; $ {EDITOR: -nano} - "$ cmd_file" && (. "$ Cmd_file") ' – user3035772

+2

@ user3035772 Buona idea! Tuttavia, dovrebbe essere '$ {EDITOR: -vim}'; D – hek2mgl

+0

correlati: http://stackoverflow.com/questions/5374255/how-to-write-data-to-existing-processs-stdin-from-external -processo –

risposta

0

Oltre all'opzione "usa un file temporaneo" fornita in user3035772's comment, un'altra opzione sarebbe quella di utilizzare la cronologia della shell per questo.

Supponendo che il comando che crea l'output è un comando di shell (o si può essere sicuro che la sua uscita è solo il comando che si desidera eseguire in seguito) è possibile utilizzare history -s per memorizzare un comando nella storia e poi richiamarlo sulla riga di comando per modificarlo (o utilizzare fc per farlo).

history -s 'echo whatever you "want your" command to be' 

Quindi utilizzare fc di modificarla nel vostro $EDITOR o colpire la freccia verso l'alto o Ctrl-p per caricare la voce Cronologia nella riga di input corrente.

1

Se si esegue bash all'interno di tmux (multiplexer di terminale), è possibile utilizzare le sue funzioni di buffer per incollare un comando al prompt. È quindi possibile modificare il comando prima di eseguirlo. Ecco un esempio banale:

#!/bin/bash 
tmux set-buffer 'ls -l' 
tmux paste-buffer & 

Mettere il comando Incolla-buffer in uscita bash sullo sfondo di lasciare che il prompt prima la pasta accade. Se la pasta accade troppo in fretta, è possibile aggiungere un sub-secondo di sonno in questo modo:

#!/bin/bash 
tmux set-buffer 'ls -l' 
{ sleep .25; tmux paste-buffer; } &