Як викликати сценарій після кожної команди bash


22

Чи можна викликати скрипт у цьому прикладі, названий hey.shпісля кожної команди bash?

Наприклад, ви вводите lsхіт Enter і ls hey.shrun , а потім буде запущено.

Потім ви вводите cd .. (або будь-яку іншу команду) , тоді hey.shбуде запущено компакт-диск і так далі.


2
Це або проблема XY, або дуже дивна ідея; чого ви намагаєтесь реально досягти?
jasonwryan

псевдонім у 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
@John Ні. Не exportварто. Просто встановіть його (або додайте до нього, наприклад, як показано вище).
PSkocik

Акуратний, а як бути після цього?
moonbutt74

2
@ moonbutt74 перед кожною командою == після кожної команди + на початку вашого баш-сесії
PSkocik

@PSkocik Мені було просто цікаво, якщо це вже є екологічною змінною, після швидкої команди ехо я дізнався, що це було. Це саме те, що я шукав
Іван

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