Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何";改为;在bash中不按enter键_Bash_Shell - Fatal编程技术网

如何";改为;在bash中不按enter键

如何";改为;在bash中不按enter键,bash,shell,Bash,Shell,我已经完成了一个shell(bash)脚本,它将预定义的规则应用于放入终端的文件 它工作得很好,但是因为它使用“读取”,所以一旦文件被放到术语窗口中,就需要按Enter键 这是当前代码的一部分 while true ; do echo "Drop file(s) here then press [ENTER]:" echo "( x,q or exit,quit )" read -p "&g

我已经完成了一个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
为true时;做
echo“在此处放置文件,然后按[ENTER]:”
echo”(x、q或退出、退出)
读取-p“>”读取文件
读取丢弃的文件时;做
如果[-e${drop_file}];然后
…这里有一堆代码。。。
其他的
[[“${dropped_file}”==*[xXqQ]*]]&退出1(&D)
fi

完成我认为您可以使用yes、printf或expect命令并使用
\n
键,该键应该能够执行您正在查找的内容。

编辑

我已经解决了这个问题

while true ; do
    read -sn1 read_file
    while read splitted_filename; do
    dropped_file="${dropped_file}${splitted_filename}"
    done <<< $(echo ${read_file})
    functionAction
    [[ "${dropped_file}" == [xXqQ] ]] && exit 1
done 
为true时;做
read-sn1 read_文件
读取拆分的文件名时;做
dropped_file=“${dropped_file}${splitted_filename}”

你喜欢还是喜欢?谢谢,这不是我想要的,但无论如何,谢谢,我解决了使用-n1分解整个文件路径,然后重新组合它again@MicheleFrau:您的程序不与键盘交互,它从标准输入读取,通常是一个文件,但如果没有提供文件,则stdin将绑定到您的tty,它又被绑定到键盘上。bash本身不知道“键”。正如您已经发现的,
-n1
指示只从stdin读取一个字符。然而,我建议在设计一个应该处理stdin的程序时不要假设“有人按了一个键”。另请参见。@user1934428谢谢您的回复,但有一个误解,可能是我表达得很糟糕,因为英语不是我的主要语言,我认为我的代码片段是不言自明的;我的意图是将文件放到终端上,以获取它们的文件路径,因此,使用上面的代码,我自己而不是脚本,必须与键盘交互并按Enter键;在我进一步写的时候,我已经解决了使用-n1来逐个字符分解掉的文件路径,然后在以后重新组合它:既不优雅也不漂亮,但它完成了预期的工作。嗯,你不必与键盘交互。您还可以使用文本编辑器为输入文件提供必要的filenname和x/q命令,并通过stdin(无需重复键盘输入)提供输入。我同意使用
-n1
不是一个优雅的解决方案,但这是为一个丑陋的用户界面付出的代价。我将通过以下方式设计脚本:期望要删除的文件列表存储在单独的文件中(并将此文件传递给脚本),或者在命令行上接受要删除的文件列表。