【发布时间】:2021-03-05 08:11:34
【问题描述】:
我已经完成了一个 shell (bash) 脚本,它将预定义的规则应用于放入终端的文件。
它工作得很好,但是因为它使用“读取”,所以一旦文件被拖放到术语窗口,它就需要按 Enter 键
这是当前代码的一部分
while true ; do
echo "Drop file(s) here then press [ENTER]:"
echo "( x,q or exit,quit )"
read -p "> " read_file
while read dropped_file ;do
if [ -e ${dropped_file} ] ; then
...bunch of code here...
else
[[ "${dropped_file}" == *[xXqQ]* ]] && exit 1
fi
done <<< $(echo ${read_file} | tr " " "\n")
clear
done
我不想在每次删除文件时按 Enter 键,我想知道是否有一些魔法可以避免与键盘交互,除非我想退出脚本
任何帮助将不胜感激
提前致谢
【问题讨论】:
-
谢谢,这不是我要找的,但无论如何谢谢,我解决了使用 -n1 分解整个 file_path 然后重新组合它的问题
-
@MicheleFrau :您的程序不与键盘交互,它从标准输入读取,通常是一个文件,但如果没有提供文件,则绑定标准输入到您的 tty,后者又绑定到键盘。 bash 本身不知道“键”。正如您已经发现的那样,
-n1指示仅从标准输入读取一个字符。但是,我建议不要在设计应该处理标准输入的程序时假设“有人按下键”。另见here。 -
@user1934428 感谢您的回复,但有一个误解,可能我表达得不好,因为英语不是我的主要语言,我认为我的代码 sn-p 是不言自明的;我的意图是将文件放到终端上以获取它们的文件路径,因此使用上面的代码,我自己而不是脚本,必须与键盘交互并按 Enter ;正如我进一步写的那样,我已经解决了使用 -n1 逐个字符分解删除的 file_path 字符,然后稍后重新组合它:既不优雅也不漂亮,但它完成了它的工作
-
好吧,你没有有与键盘交互。您还可以使用文本编辑器提供具有必要文件名和 x/q 命令的输入文件,并通过 stdin 提供此文件(无需重复的键盘输入)。我同意使用
-n 1不是一个优雅的解决方案,但这是你必须为丑陋的用户界面付出的代价。我会通过期望要删除的文件列表存储在单独的文件中(并将此文件传递给您的脚本)来设计脚本,或者接受要在命令行上删除的文件列表。