Запускайте скрипт bash кожного разу, коли виконуються командні рядки


9

Я новий користувач Ubuntu / Linux, я хотів би задати питання, як мою назву вище.

Наприклад, у мене є файл bash ./script, я б хотів змусити його запускатись автоматично, коли я вводив будь-який командний рядок. Після того, як я виконати командний рядок , pwdто ./scriptбуде виконуватися. Як тільки я введу наступний командний рядок, ls -laтоді ./scriptзапуск буде виконаний знову.


4
ми можемо запитати: яку дію ви маєте намір зробити для кожної введеної команди? і чи має бути це лише для тих, хто вводиться інтерактивно? або також для будь-якої команди в сценарії? а як щодо команд, набраних над ssh? тощо. Це може бути XYProblem
Олів'є

Відповіді:


13

Вам потрібно встановити PROMPT_COMMANDзмінну. Від man bash:

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

Наприклад, це запише поточну дату /tmp/PCкожного разу, коли виконується команда:

 $ PROMPT_COMMAND="date > /tmp/PC"

1
Так, я зрозумів, це досить круте рішення. (підтримується)
Ендер Фан

1
Це неправильно. Команда echo $(date)буде виконуватися під час оголошення, тому завжди буде показувати (зберігати) той самий час.
heemayl

@heemayl: звичайно, ти маєш рацію, я це виправив
Аркадіюш Драбчик

@ lộcphan Якщо одна з цих відповідей вирішила вашу проблему, будь ласка, знайдіть хвилинку та прийміть її , натиснувши на галочку зліва. Це означатиме відповідь на питання і спосіб висловлення подяки на сайтах Stack Exchange.
тердон

@heemayl: Чому? ...
Аркадіуш Драбчик

11

Ви шукаєте PROMPT_COMMANDзмінну середовища, значення цієї змінної буде виконано як команда після виконання кожної команди, заданої в терміналі, безпосередньо перед показом наступного рядка.

Наприклад, встановіть його як:

export PROMPT_COMMAND='/path/to/script'

/path/to/scriptСпершу зробіть сценарій , який можна виконати.

Тепер сценарій буде запускатися після кожної команди.

Зауважимо лише, що якщо ви не хочете експортувати змінну, тобто зробіть її змінною оболонки, а не середовищем, скиньте export:

PROMPT_COMMAND='/path/to/script'

Від man bash:

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

Я отримав це, дуже дякую за вашу допомогу :) (upvoted btw)
Ender Phan

Для чого ви використовуєте export?
Аркадіюш Драбчик

@ArkadiuszDrabczyk exportзробить змінну PROMPT_COMMANDсередовищем змінною, тобто змінна буде доступна для всіх дочірніх процесів (наприклад, підрозділів) поточної оболонки. Якщо ви просто хочете обмежити його лише протягом поточного сеансу оболонки (змінної оболонки), видаліть export.
heemayl

5
@heemayl: IMO exportтут не є хорошою практикою - він PROMPT_COMMANDповинен бути встановлений лише в інтерактивному файлі запуску оболонки і не повинен бути видимим в оточенні
Arkadiusz Drabczyk
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.