Я пытаюсь загрузить клиент TeamSpeak 3 и одновременно принять процедуру лицензионного соглашения. Я знаю, как передать «да» перед скриптом, но процедура требует, чтобы я нажал, Qчтобы выйти из «лицензионного соглашения», прежде чем нажать клавишу, Yчтобы начать распаковку клиента.
#!/bin/bash
cd /home/test/ts3_client_files
wget http://dl.4players.de/ts/releases/3.0.19.4/TeamSpeak3-Client-linux_amd64-3.0.19.4.run
yes 'y' | ./TeamSpeak3-Client-linux_amd64-3.0.19.4.run
Как вы видите, процедура требует нажатия Qсначала. Когда я нажимаю Q, Yзатем нажимается автоматически и файлы распаковываются.
+ cd /home/test/ts3_client_files
+ wget http://dl.4players.de/ts/releases/3.0.19.4/TeamSpeak3-Client-linux_amd64-3.0.19.4.run
--2016-09-05 08:33:26-- http://dl.4players.de/ts/releases/3.0.19.4/TeamSpeak3-Client-linux_amd64-3.0.19.4.run
Resolving dl.4players.de (dl.4players.de)... 85.25.26.25, 85.25.26.26, 85.25.26.27
Connecting to dl.4players.de (dl.4players.de)|85.25.26.25|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 37054436 (35M) [application/x-makeself]
Saving to: ‘TeamSpeak3-Client-linux_amd64-3.0.19.4.run’
100%[=============================>] 37,054,436 9.56MB/s in 7.1s
2016-09-05 08:33:34 (4.96 MB/s) - ‘TeamSpeak3-Client-linux_amd64-3.0.19.4.run’ saved [37054436/37054436]
+ chmod 0700 TeamSpeak3-Client-linux_amd64-3.0.19.4.run
+ yes y
+ ./TeamSpeak3-Client-linux_amd64-3.0.19.4.run
Welcome to the TeamSpeak 3 Client for Linux on amd64 installer
In order to install this software you are required to accept the license
agreement, please press return to view the license.
You can scroll with the arrow keys and quit the viewer by pressing 'q'.
[RETURN]
Please type y to accept, n otherwise: Creating directory TeamSpeak3-Client-linux_amd64
Verifying archive integrity... All good.
Uncompressing TeamSpeak 3 Client for Linux on amd64 100%
+ exit
Не будет ли кто-нибудь так добр и покажет мне дорогу?
решение1
Нажатие qклавиши служит сигналом выхода из пейджера less
, что явно используется скриптом:
read FOO
echo "$licensetxt" | less
while true
do
MS_Printf "Please type y to accept, n otherwise: "
read yn
if test x"$yn" = xn; then
keep=n
eval $finish; exit 1
break;
elif test x"$yn" = xy; then
break;
fi
done
Иman less
говорит:
Параметры также берутся из переменной окружения «LESS».
Установите эту переменную среды следующим образом:
printf '\ny\n' | LESS='+q' ./TeamSpeak3-Client-linux_amd64-3.0.19.4.run
Решение взято из@steeldriver комментарийи добавлено в соответствии сзакон @JamesTheAwesomeDude.