如果按下向上/向左箭头键,是否可以在 bash 脚本中使用大小写箭头键来运行一组特定的命令,如果按下向下/向右箭头键,则可以运行特定的一组命令?我试图通过在显示数据时使用箭头键在用户之间快速切换,使用此脚本从中读取数据。

function main()  # The main function that controls the execution of all other functions
{
  mkdir -p ~/usertmp  # Make a new temporary user directory if it doesn't exist
  touch ~/last_seen_output.txt  # Create the output file if it doesn't exist
  cat /dev/null > ~/last_seen_output.txt  # Make sure that the output file is empty
  gather  # Call the "gather" function
  total=$((`wc -l ~/usertmp/user_list.txt|awk '{print $1}'`-1))  # Calculate the total amount of lines and subtract 1 from the result
  echo Current Time: `date +%s` > ~/last_seen_output.txt  # Print the current time to the output file for later reference
  echo "" > ~/last_seen_output.txt  # Print a blank line to the output file
    if [ $log -eq 1 ]
      then
        # If it is enabled, then delete the old backups to prevent errors
        while [ $line_number -le $total ]
          do

            line_number=$((line_number+1))  # Add 1 to the current line number
            calculate # Call the "calculate" function
            hms  # Call the "hms" function to convert the time in seconds to normal time
            log
        done
      else
        while [ $line_number -le $total ]
          do
            line_number=$((line_number+1))  # Add 1 to the current line number
            calculate # Call the "calculate" function
            hms  # Call the "hms" function to convert the time in seconds to normal time
            echo "Displaying, please hit enter to view the users one by one."
            read  # Wait for user input
            if [ "$log_while_displaying" ]
              then
                log
                display
              else
                display
            fi
        done
    fi
}

https://github.com/jbondhus/last-seen/blob/master/last-seen.sh 是完整的脚本。

注释为“等待用户输入”的读取命令是您按回车键转到下一个用户的命令。基本上,这个脚本的作用是列出用户和每个用户登录后耗时。我试图使用箭头键在显示的每个用户之间切换。我认为可能可以使用 case 语句来区分键输入。重申我的观点,我不确定这是否可能。如果不是,有人能想出另一种方法来做到这一点吗?

最佳答案

您可以使用 read -n 1 读取一个字符,然后使用 case 语句根据键选择要执行的操作。

问题是箭头键输出一个以上的字符,并且序列(及其长度)因终端而异。

例如,在我使用的终端上,向右箭头输出 ^[[C 。您可以通过按 Ctrl-V 右箭头来查看终端输出的顺序。其他光标控制键(如 Page Up 和 End)也是如此。

相反,我建议使用单字符键,如 <> 。在脚本中处理它们会简单得多。

read -n 1 key

case "$key" in
    '<') go_left;;
    '>') go_right;;
esac

关于bash - bash 中的大小写箭头键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10679188/

10-15 13:15