Bash:一次收集所有输入,而不等待进程结束

Bash:一次收集所有输入,而不等待进程结束,bash,variables,while-loop,append,user-input,Bash,Variables,While Loop,Append,User Input,我一直在编写一个bash脚本,其中的过程取决于用户的输入,但这是一个1分钟的过程,如果用户想多次这样做,他将不得不等待循环完成。 代码如下: while [[ ! "$addstr" =~ ^[Nn](.*)?$ ]]; do read -p "[*] String to permute around: " string echo; sleep 0.1s while [[ ! "$string" =~ ^[0-9a-zA-Z]+$ ]]; do echo

我一直在编写一个bash脚本,其中的过程取决于用户的输入,但这是一个1分钟的过程,如果用户想多次这样做,他将不得不等待循环完成。 代码如下:

while [[ ! "$addstr" =~ ^[Nn](.*)?$ ]]; do
    read -p "[*] String to permute around: " string
    echo; sleep 0.1s

    while [[ ! "$string" =~ ^[0-9a-zA-Z]+$ ]]; do
        echo "[!] Only alphanumeric strings are allowed!"; sleep 0.1s
        read -p "=> " string
        echo; sleep 0.1s
    done

    ## PROCESS ##

    echo "[?] Do you want to permute around another string?"; sleep 0.1s
    read -p "=> " addstr
    echo; sleep 0.1s

    while [[ ! "$addstr" =~ ^[YyNn](.*)?$ ]]; do
        echo "[!] Type again:"
        read -p "=> " addstr
        echo; sleep 0.1s
    done
done

我想做的是允许用户一次输入所有字符串,存储每个字符串的变量,并根据需要多次运行进程。。。我尝试了很多方法,甚至在“$string”后面加了一个“$counter”,但都没有成功,我相信这是一个非常简单的方法,我只是不知道而已。

修改脚本,从stdin读取输入。然后用户可以从文件重定向

然后,您的脚本变成:

while IFS= read -r string; do
    if [[ ! "$string" =~ ^[0-9a-zA-Z]+$ ]]; do
        echo "[!] Only alphanumeric strings are allowed! $string"
        continue
    fi

    ## PROCESS ##
done
用户输入如下内容

./yourscript < file.with.strings

移除休眠,你会加快进程。我喜欢程序与它们一起运行的方式。这只是一件个人的事情。同样,你的正则表达式可以用像
^[[:alnum:][]+$
这样的字符类来编写,但不能这样做,因为它只是更大程序的一部分。。但这是有道理的,谢谢你。关于regex:是的,完全忘记了。再次感谢你!这似乎有道理,但你能解释一下添加的语法吗?我仍在学习,不能得到一些东西,比如'inputs()','inputs+=(“$string”)'和'${inputs[@]}'。。你能解释一下吗?那是bash数组语法。声明一个空数组,向其中添加一个元素,并对其进行迭代
inputs=()
while true; do
    read -p "[*] String to permute around: " string
    echo; sleep 0.1s

    while [[ ! "$string" =~ ^[[:alnum:]]+$ ]]; do
        echo "[!] Only alphanumeric strings are allowed!"; sleep 0.1s
        read -p "=> " string
        echo; sleep 0.1s
    done

    # store the user input
    inputs+=( "$string" )

    echo "[?] Do you want to permute around another string?"; sleep 0.1s
    read -p "=> " addstr
    echo; sleep 0.1s

    while [[ ! "$addstr" =~ ^[[:blank:]]*[YyNn] ]]; do
        echo "[!] Type again:"
        read -p "=> " addstr
        echo; sleep 0.1s
    done

    [[ "$addstr" =~ ^[[:blank:]]*[Nn] ]] && break
done

## PROCESS ##
for string in "${inputs[@]}"; do
    process "$string"
done