在命令行上的 Y 之前自动传递“q”

cur*_*cat 7 command-line bash scripts

我正在尝试下载 teampeak 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
Run Code Online (Sandbox Code Playgroud)

如您所见,该例程需要按Q。当我按下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
Run Code Online (Sandbox Code Playgroud)

有人会这么好心给我指路吗?

des*_*ert 5

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
Run Code Online (Sandbox Code Playgroud)

man less说:

选项也取自环境变量“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
Run Code Online (Sandbox Code Playgroud)

解决方案取自@steeldriver 的评论,并根据@JamesTheAwesomeDude 的法律添加