So rufen Sie nach jedem Bash-Befehl ein Skript auf


22

Ist es möglich, in diesem Beispiel ein Skript aufzurufen, das hey.shnach jedem Bash-Befehl benannt ist?

Zum Beispiel tippen Sie lsdie Eingabetaste und ls wird ausgeführt, dann wird hey.shausgeführt.

Sie geben dann cd .. (oder einen anderen Befehl) ein , cd wird ausgeführt und dann wird hey.shausgeführt und so weiter.


2
Dies ist entweder ein XY-Problem oder eine sehr seltsame Idee. Was versuchst du eigentlich zu erreichen?
Jasonwryan

Alias ​​in bash.rc vielleicht?
Moonbutt74

Antworten:


29
PROMPT_COMMAND+="hey.sh;"

PROMPT_COMMAND Wenn gesetzt, wird der Wert als Befehl ausgeführt, bevor jede primäre Eingabeaufforderung ausgegeben wird.


Hinweis: Umgebungsvariablen vs Shell-Variablen

In der Standardeinstellung PROMPT_COMMANDist nicht eine Umgebungsvariable . Es ist nur eine Shell-Variable .

Auf beide Variablentypen wird auf dieselbe Weise zugegriffen ( "$variable*"), Umgebungsvariablen werden jedoch von untergeordneten Prozessen geerbt, Shell-Variablen hingegen nicht.

Die Konvention besteht darin, Umgebungsvariablen + Shell-Variablen, die Ihre Shell konfigurieren, in Großbuchstaben zu setzen (PROMPT_COMMAND konfiguriert Ihre Shell), andere Variablentypen jedoch in Kleinbuchstaben.

In bash können Sie Folgendes tun: declare -pum herauszufinden, ob eine Variable exportiert wird (= ist eine Umgebungsvariable) oder nicht:

$ declare -p PATH
declare -x PATH=... #-x means it's exported
$ declare PROMPT_COMMAND
declare -- PROMPT_COMMAND=... #no -x so just a shell variable

2
@ John Nr Do not exportes. Legen Sie es einfach fest (oder hängen Sie es an, z. B. wie oben gezeigt).
PSkocik

Schön, was ist danach?
Moonbutt74

2
@ moonbutt74 vor jedem Befehl == nach jedem Befehl + zu Beginn Ihrer Bash-Sitzung
PSkocik

@PSkocik Ich war nur neugierig, ob das bereits eine Umgebungsvariable ist, und habe auf einen kurzen Echo-Befehl herausgefunden, dass dies der Fall ist. Das macht genau das, wonach ich gesucht habe
John

@ John Standardmäßig ist es nur eine Shell-Variable, keine Umgebungsvariable.
PSkocik
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.