Linux 脚本,用于在 F1 击球时执行某些内容



>我有这个脚本 start.sh

 #!/bin/bash
while[1]
do 
read -sn3 key
if [$key=="33[[A"]
then
  ./test1
else
  ./test2
fi
done

我想设置一个永久循环检查,看看是否按下了 F1 键。如果按下,则执行测试1,否则执行测试2。 我做了 start.sh 并在后台运行,以便其他程序可以运行。

我收到错误而未找到 [1] 命令意外标记"do"附近的语法错误[f==\033]: 找不到命令

还有这个读取命令在哪里?我输入哪个阅读,它没有找到它。

此外,如果尝试./start.sh,它会给出完全不同的行为。 我输入一个密钥,它说找不到该密钥。 我虽然只是在后台运行脚本

你的代码中有几个基本的语法问题(考虑在发布之前使用 shellcheck 来清理这些东西),但这种方法本身是有缺陷的。点击"q"和"F1"会产生不同长度的输入。

下面是一个脚本,它依赖于转义序列都来自同一个读取调用的事实,这很脏,但很有效:

#!/bin/bash
readkey() {
  local key settings
  settings=$(stty -g)             # save terminal settings
  stty -icanon -echo min 0        # disable buffering/echo, allow read to poll
  dd count=1 > /dev/null 2>&1     # Throw away anything currently in the buffer
  stty min 1                      # Don't allow read to poll anymore
  key=$(dd count=1 2> /dev/null)  # do a single read(2) call
  stty "$settings"                # restore terminal settings
  printf "%s" "$key"
}
# Get the F1 key sequence from termcap, fall back on Linux console
# TERM has to be set correctly for this to work. 
f1=$(tput kf1) || f1=$'33[[A' 
while true
do
  echo "Hit F1 to party, or any other key to continue"
  key=$(readkey)
  if [[ $key == "$f1" ]]
  then
    echo "Party!"
  else
    echo "Continuing..."
  fi
done

应该是

while :

while true

试试这个:

#!/bin/bash
while true
do 
  read -sn3 key
  if [ "$key" = "$(tput kf1)" ]
  then
    ./test1
  else
    ./test2
  fi
done

使用tput生成控制序列更健壮,您可以在man terminfo中看到完整列表。如果tput不可用,则可以将$'eOP'用于大多数终端模拟器或$'e[[A'用于 Linux 控制台(字符串需要$才能使 bash 解释转义序列)。

read 是一个bash内置命令 - 尝试 help read

相关内容

  • 没有找到相关文章

最新更新