Как сделать фоновым `просмотр `выполнение команды при изменении

Михаил,

У меня была та же проблема с теми же расширениями. Проблема в том, что они являются «Системными расширениями», а не находятся в обычном месте ~/.local/share/gnome-shell/extensions, как говорили другие. Вместо этого в /usr/share/gnome-shell/extensionsустанавливаются «Системные расширения».

Для удаления:

cd /usr/share/gnome-shell/extensions
sudo rm -rf apps-menu@gnome-shell-extensions.gcampax.github.com

При необходимости повторите.

Наконец, вам нужно перезагрузить оболочку:Alt+F2 r

0
23.06.2021, 07:24
2 ответа

watchне предназначен для того, что вы хотите делать.

В какой-то момент watchпытается переконфигурировать терминал. Находясь в фоновом режиме , он получает SIGTTOU и останавливается. Вся работа получает SIGTTOU.

В интерактивной оболочке с управлением заданиями вы можете увидеть это при последующем вызове jobs. В zshвы увидите примечание suspended (tty output). jobsв других оболочках может быть не столь информативным.

В моих тестах мне нужно было перенаправить stdout и stderr с терминала:

(watch -g cat tmp >/dev/null 2>&1 && echo "changed") &

Если исходные настройки терминала включают tostop, то echoвызовет SIGTTOU при попытке записи. Запустите stty -tostopзаранее, чтобы убедиться, что настройки позволяют echoпечатать на терминал :

.
stty -tostop; (watch -g cat tmp >/dev/null 2>&1 && echo "changed") &

Обратите внимание, что другие процессы могут настраивать терминал самостоятельно, поэтому они могут создавать помехи.

1
28.07.2021, 11:22

Простым способом было бы через inotifywaitв режиме монитора -m, т. е. работать постоянно, а не выходить после первого записанного события. Укажите -eсобытие, например изменение файла/каталога, для просмотра -или не отображайте все события, такие как открытие, доступ, запись и т. д. См. man inotifywaitдля получения дополнительной информации о возможных событиях.

$inotifywait -m -e modify tmp &
$echo 1 >> tmp
tmp MODIFY

Недостаток в том, что в этой версии вы не выполняете команду самостоятельно, а просто получаете стандартное уведомление. Для явного выполнения команды и неограниченного просмотра файла/каталога что-то вроде этого будет работать (с использованием -qрежима uiet):

while ((1)) ; do \
   inotifywait -q -e modify tmp && echo "tmp was changed" \
done &
2
28.07.2021, 11:22

Теги

Похожие вопросы