Как вызывать скрипт после каждой команды 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

2
@ Джон Нет. Не надо export. Просто установите его (или добавьте к нему, например, как показано выше).
PSkocik

Опрятно, а как же после того, как?
moonbutt74

2
@ moonbutt74 перед каждой командой == после каждой команды + в начале вашей сессии bash
PSkocik

@PSkocik Я понял, мне было просто любопытно, если это уже переменная окружения, по команде быстрого эха я узнал, что это так. Это именно то , что я искал
Джон

@John По умолчанию это просто переменная оболочки, а не переменная окружения.
PSkocik
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.