この機能を機能させるにはどうすればよいですか?
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
最善の解決策は、ファイルからファイルパスを読み取るか、スクリプトにパラメータとして渡すことです。@terdonが言った。
read
Escキーを押して終了する最良の方法は次のとおりです。https://superuser.com/questions/1267984/how-to-exit-read-bash-builtin-by-pressing-the-esc-key/1447324#1447324
別の過酷な方法(Escキーと矢印キーを押すことを区別しない):
#!/usr/bin/env bash
inputString=''
clear() { printf '\033c'; }
ask() {
clear
printf '%s' "Enter the filenames: $inputString"
}
ask
while :; do
read -rN 1 char
case "$char" in
$'\e') # Esc (or arrow) key pressed
clear
exit
;;
$'\n') # Enter key pressed
break
;;
$'\177') # Backspace key pressed
[[ "${#inputString}" -gt 0 ]] &&
inputString="${inputString::-1}"
ask
continue
;;
*)
;;
esac
[[ -n "$char" ]] &&
inputString+="$char"
done
array_fromString() {
local -n array_fromString_a="$1"
local IFS=$'\n'
array_fromString_a=(
$(xargs -n1 <<< "$2")
)
}
files=()
array_fromString files "$inputString"
echo "Entered filenames: "
printf '%s\n' "${files[@]}"