Esegui lo script bash ogni volta che vengono eseguite le righe di comando


9

Sono un nuovo utente Ubuntu / Linux, vorrei porre una domanda come il mio titolo sopra.

Ad esempio, ho un file bash ./script, vorrei farlo funzionare automaticamente quando scrivo qualsiasi riga di comando. Una volta che ho eseguito da riga di comando pwd, allora la ./scriptverrà eseguito. Una volta digitata la riga di comando ls -lasuccessiva, ./scriptverrà eseguita nuovamente.


4
possiamo chiederci: che tipo di azione intendi fare su ogni singolo comando digitato? e dovrebbe essere solo per quelli digitati in modo interattivo? o anche per qualsiasi comando in uno script? e che dire dei comandi digitati su ssh? ecc. Questo potrebbe essere un XYProblem
Olivier Dulac,

Risposte:


13

Devi impostare la PROMPT_COMMANDvariabile. Da man bash:

PROMPT_COMMAND
              If set, the value is executed as a command prior to
              issuing each primary prompt.

Ad esempio, questo scriverà la data corrente /tmp/PCogni volta che viene eseguito un comando:

 $ PROMPT_COMMAND="date > /tmp/PC"

1
Sì, ho capito ... soluzione davvero interessante. (votato)
Ender Phan,

1
Questo è sbagliato. Il comando echo $(date)verrà eseguito al momento della dichiarazione, quindi mostrerà sempre (salva) allo stesso tempo.
heemayl,

@heemayl: certo che hai ragione, l'ho risolto
Arkadiusz Drabczyk,

@ lộcphan Se una di queste risposte ha risolto il problema, ti preghiamo di dedicare un momento e accettarlo facendo clic sul segno di spunta a sinistra. Questo segnerà la domanda come risposta ed è il modo in cui i ringraziamenti sono espressi sui siti di Stack Exchange.
Terdon,

@heemayl: Perché? ...
Arkadiusz Drabczyk,

11

Stai cercando una PROMPT_COMMANDvariabile d'ambiente, il valore di questa variabile verrà eseguito come comando, dopo che ogni comando dato nel terminale viene eseguito, poco prima di mostrare il prossimo prompt.

Ad esempio, impostalo come:

export PROMPT_COMMAND='/path/to/script'

Crea prima lo script /path/to/script, eseguibile.

Ora lo script verrà eseguito dopo ogni comando.

Solo per notare, se non si desidera esportare la variabile, ovvero renderla una variabile shell anziché una ambiente, rilasciare export:

PROMPT_COMMAND='/path/to/script'

Da man bash:

PROMPT_COMMAND 
If set, the value is executed as a command prior to issuing each primary prompt.

Ho capito, grazie mille per il tuo aiuto :) (votato a parte)
Ender Phan,

Perché stai usando export?
Arkadiusz Drabczyk,

@ArkadiuszDrabczyk exportrenderà la variabile PROMPT_COMMANDuna variabile d'ambiente, ovvero la variabile sarà disponibile per tutti i processi figlio (es. Sottotitoli) della shell corrente. Se si desidera limitarlo solo all'interno della sessione di shell corrente (variabile di shell), rimuoverlo export.
heemayl

5
@heemayl: IMO exportnon è una buona pratica qui - PROMPT_COMMANDdovrebbe essere impostato solo in un file di avvio della shell interattivo e non dovrebbe essere visibile nell'ambiente
Arkadiusz Drabczyk,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.