Bash - 누르면"읽기" 명령에서 즉시 중지하고 다른 작업을 수행합니다.

Bash - 누르면"읽기" 명령에서 즉시 중지하고 다른 작업을 수행합니다.

이 기능을 작동시키려면 어떻게 해야 합니까?

Esc사용자로부터 입력을 받는 동안 누르면 스크립트가 종료됩니다.

read -r -p "Enter the filenames: " -a arr

if press Esc; then
     read $round
     mkdir $round
fi

for filenames in "${arr[@]}"; do
   if [[ -e "${filenames} ]]; then
        echo "${filenames} file exists (no override)"
   else
        cp -n ~/Documents/library/normal.cpp "${filenames}"
   fi
done

Esc이 스크립트에서 키를 어떻게 감지할 수 있나요 ?

추신: 많은 리소스를 보았습니다.
https://www.linuxquestions.org/questions/linux-newbie-8/bash-esc-key-in-a-case-statement-759927/
그들다른 변수를 사용하세요좋아 $key하거나 read -n1 $key그냥한 문자 입력

하지만 여기는문자열이나 배열이 있으면 어떻게 해야 하나요?

답변1

이것은 작동해야합니다세게 때리다:

#!/bin/bash


# Bind the Escape key to run "escape_function" when pressed.
bind_escape () { bind -x '"\e": escape_function' 2> /dev/null; }

# Unbind the Escape key.
unbind_escape () { bind -r "\e" 2> /dev/null; }

escape_function () {

unbind_escape
echo "escape key pressed"
# command/s to be executed when the Escape key is pressed
exit

}

bind_escape

# Use read -e for this to work.
read -e -r -p "Enter the filenames: " -a arr

unbind_escape

# Commands to be executed when Enter is pressed.
for filename in "${arr[@]}"; do

        echo "$filename"

done

답변2

Esc캐릭터는 특수 캐릭터입니다.

일반적으로 ESC, F1...F12, 화살표...와 같은 특수 문자를 명령으로 가로채고 싶을 때 read루프를 사용합니다.

#! /bin/bash

declare -r CHAR_LF=$'\n'
declare -r CHAR_ESC=$'\e'
declare -i FLAG_ESC=0
declare RES=
echo -n "Enter the filenames: "
while read -r -N 1 -p "" -d "" CHAR; do
  if [[ "${CHAR}" == "${CHAR_ESC}" ]]; then
    FLAG_ESC=1
    echo
    break
  elif [[ "${CHAR}" == "${CHAR_LF}" ]]; then
    break
  else
    RES+="${CHAR}"
  fi
done
if [[ $FLAG_ESC -eq 1 ]]; then
  echo "ESC pressed"
else
  echo "Use RES variable with '${RES}' value"
fi

관련 정보