Как вызывать скрипт после каждой команды bash

22

Можно ли вызвать скрипт в этом примере, названный в hey.shчесть каждой команды bash?

Например, вы набираете lshit enter и ls hey.shrun , а затем запускаете.

Затем вы набираете cd .. (или любую другую команду) , затем запускается cd hey.sh, и так далее.

Джон
источник
2
Это либо проблема XY, либо очень странная идея; что вы пытаетесь достичь на самом деле?
Джейсонвриан
алиас в bash.rc может быть?
moonbutt74

Ответы:

29
PROMPT_COMMAND+="hey.sh;"

PROMPT_COMMAND Если установлено, значение выполняется как команда перед выдачей каждого основного приглашения.


Примечание: переменные среды против переменных оболочки

По умолчанию, PROMPT_COMMANDэто не переменная окружения . Это просто переменная оболочки .

К обоим типам переменных обращаются одинаково ( "$variable*"), но переменные среды наследуются дочерними процессами, а переменные оболочки - нет.

Соглашение состоит в том, чтобы использовать переменные окружения + переменные оболочки, которые настраивают вашу оболочку (PROMPT_COMMAND настраивает вашу оболочку), но оставляют другие типы переменных строчными.

В bash вы можете сделать: declare -pузнать, экспортируется ли переменная (= является переменной среды) или нет:

$ declare -p PATH
declare -x PATH=... #-x means it's exported
$ declare PROMPT_COMMAND
declare -- PROMPT_COMMAND=... #no -x so just a shell variable
PSkocik
источник
2
@ Джон Нет. Не надо export. Просто установите его (или добавьте к нему, например, как показано выше).
PSkocik
Опрятно, а как же после того, как?
moonbutt74
2
@ moonbutt74 перед каждой командой == после каждой команды + в начале вашей сессии bash
PSkocik
@PSkocik Я понял, мне было просто любопытно, если это уже переменная окружения, по команде быстрого эха я узнал, что это так. Это именно то , что я искал
Джон
@John По умолчанию это просто переменная оболочки, а не переменная окружения.
PSkocik