この機能を動作させるにはどうすればよいですか?
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このスクリプトでキーを検出するにはどうすればいいでしょうか?
PS: 多くのリソースを見ました
https://www.linuxquestions.org/questions/linux-newbie-8/bash-esc-key-in-a-case-statement-759927/
彼らは別の変数を使用する好きかた$key
だread -n1 $key
1文字入力
しかし、ここで文字列または配列がある場合はどうすればいいでしょうか?
答え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