Обойти это непросто.
Либо вы позволяете less
использовать альтернативный экран, чтобы оставить исходный нетронутым, либо (не используете-X
).
Нельзя ожидать, что less
восстановит экран в том виде, в котором он был, и начнет использовать альтернативный экран после того, как прочитает всю страницу.
Нам нужно как-то подождать, пока хотя бы одна страница или eof не будут прочитаны, прежде чем запустить less
в правильном режиме и отправить данные. Что-то вроде:
page_stdin() {
awk -v l="${LINES:=$(tput lines)}" '
cmd {print | cmd; next}
{lines = lines $0 ORS}
NR == l {cmd = "less"; printf "%s", lines | cmd}
END {if (!cmd) printf "%s", lines | "less -FX"}'
}
mypager() {
if [ "$#" -eq 0 ]; then
page_stdin
else
for file do page_stdin < "$file"; done
fi
}
(с GNU awk
, вы можете заменить ORS
на RT
, чтобы не добавлять завершающую новую строку, если ее не было изначально ).
Но это означает, что вы не начнете видеть вывод переданной команды в cmd | mypager
до тех пор, пока он не будет заполнен на всю страницу или не завершится вывод. (попробуйте, например, seq 200 | pv -qL40 | mypager
по сравнению сseq 200 | pv -qL40 | less
).
Обратите внимание, что он предполагает, что вы не используете такие вещи, как LESS=-s
и будут обмануты строками, большими, чем экран, если у вас нет LESS=-S
.
Мне действительно удалось получить работающий скрипт с помощью xdotool, как было предложено ранее, однако, когда я пытаюсь поставить в очередь команды из моего исходного скрипта:
#!bin/bash xset s noblank xset s off xset -dpms unclutter -idle 0 -root & chromium-browser --noerrdiaglogs --disable-infobars --kiosk https://192.168.0.1/webconsole sleep 25s xdotool search --onlyvisible --class "chromium" windowfocus key Tab xdotool key Tab xdotool type password xdotool key Return
Моя единственная проблема заключается в том, что мой скрипт зависает на этапе открытия Chromium, жалуясь на ошибку рукопожатия SSL, которая препятствует запуску второй части скрипта. Возврат с ошибкой:
libEGL warning: DRI2: failed to authenticate [ssl_client_socket_impl.cc(962) handshake failed; returned -1 SSL error code 1, net_error -202
Эта ошибка будет повторяться несколько раз, и попытка принудительно закрыть этот аспект скрипта приведет к естественному закрытию веб-страницы.
Что посоветуете?
В конце концов мне удалось заставить это работать. Я запустил «Браузер Chromium -», и мой пароль ввел скрипт с помощью xdotool, однако я запустил их одновременно с помощью & и переместил свой xdotool в другой скрипт, и теперь это сработало для меня.
chromium-browser --noerrdiaglogs --disable-infobars --kiosk https://192.168.0.1/webconsole & /bin/bash /home/pi/test.sh
С Test.sh, содержащим:
#!bin/bash xdotool search --onlyvisible --class "chromium" windowfocus key Tab xdotool key Tab xdotool type password xdotool key Return sleep 9999999h
Была добавлена команда «Сон», так как после завершения этого скрипта, по сути, завершалась вся задача. Всем спасибо за советы и время!:)