Вы могли бы написать что-нибудь вокруг
#!/bin/bash
inotifywait -e modify /sys/devices/virtual/tty/tty0/active
case "$(cat /sys/devices/virtual/tty/tty0/active)" in
tty7) <dothis> ;;
tty8) <dothat> ;;
esac
exec $0 $*
«Файл» /sys/devices/virtual/tty/tty0/active
сообщает, какая виртуальная консоль является активной, с точки зрения tty7
или tty1
и т. д., и он изменяется при переходе от одной к другой. Команда inotifywait
просто ждет, пока не появится событие modify
для этого имени пути, поэтому сценарий может затем проверить, какое из них предназначено для выполнения связанной с ним задачи. После этого (строка exec
)сценарий повторно вызывает себя для захвата следующего перехода виртуальной консоли.
В Linux на основе Debian вы найдете inotifywait
как часть пакета inotify-tools
. Путь /sys/..
требует должным образом смонтированного sysfs
,который обычно принадлежит ядру Linux с давних времен.
Переменная Разделитель полей ввода по умолчанию использует все виды пробелов. Вы хотите, чтобы он явно установил его на вкладку. На справочной странице awk написано:
-F sepstring
Define the input field separator. This option shall be
equivalent to:
-v FS=sepstring
И далее вниз:
FS Input field separator regular expression; a <space> by default.
Итак, чтобы установить ФС на вкладку:
$ awk -F'\t' '{print $7}' file.txt