Это похоже на состояние гонки: другое приложение может анализировать тот же ключ для переключения Wifi.
Это можно проверить, привязав ваш скрипт к несвязанному ключу: если этот другой ключ заставляет ваш скрипт работать, как ожидалось, значит, у вас есть состояние гонки на XF86WLAN.
Я не думаю, что понимаю первую часть вашего вопроса, основываясь на ваших более поздних комментариях. На мой взгляд, использование less + F + / файл журнала шаблона
работает и продолжает выделять новые экземпляры шаблона
по мере их появления в обновленном файле.
Что касается бонусной части вашего вопроса, вы можете попробовать одну из следующих команд:
less +\&DHCP$'\n' /var/log/syslog
или
less +\&DHCP^M /var/log/syslog
В этой второй команде ^ M
генерируется нажатием Ctrl- V
, затем Введите
. Куда проще просто нажать Enter, когда меньше начинается, хотя, если вы не хотите писать скрипт или что-то в этом роде.
Насколько я понимаю, вы хотите прочитать файл / var / log / syslog
и увидеть все записи с " DHCP "и продолжайте видеть новые записи по мере их появления. Если это правильно, это можно сделать с помощью tail -f / var / log / syslog | grep DHCP
. Если моя интерпретация вашего запроса неверна, в чем я ошибся?
И на фронте огромного чрезмерного усложнения: автоматический хвост с изменяемыми условиями поиска через оболочку expect
!
#!/usr/bin/env expect
#
# Sticky search wrapper for less; tails the given file, though with
# input of
# /asdf
# or whatever will search for that new term then re-tail the file.
# Probably needs `less` with (the default) hilight mode enabled.
if {[llength $argv] == 0} {
puts stderr {Usage: $argv0 [searchterm] file}
exit 64
} elseif {[llength $argv] == 1} {
set fname [lindex $argv 0]
set search ""
} else {
set fname [lindex $argv 1]
set search [lindex $argv 0]
}
# FIXME soas to nix any default options (like turning off hilight) and
# on account of LESSOPEN and LESSCLOSE being security risks due to the
# defaults certain vendors set.
foreach ev [list LESS LESSOPEN LESSCLOSE] {
if {[info exists env($ev)]} {
unset env($ev)
}
}
match_max 999
set timeout -1
spawn -noecho less $fname
expect {
# TODO need better way to detect that less didn't fly...
-ex "No such file or directory" { exit }
-re "." { }
default { exit }
}
if {$search ne ""} {
send -- "/$search\r"
}
send -raw "F"
interact {
-echo -re "/(.*)\[\n\r]" {
# send_user "DBG search $interact_out(1,string)"
send -raw "\003\r/"
send -- $interact_out(1,string)
send -raw "\rF"
}
}