使用读取时出现“无协进程”错误

使用读取时出现“无协进程”错误

我有一个名为 的 bash 脚本reader。它读取用户输入:

#!/bin/bash
read -p "What is your name?" username
echo "Hello, ${username}"

通过(编辑:从 zsh shell)运行脚本source reader,我收到错误reader:read:2: -p: no coprocess。当我运行它时,它不会给出此错误./reader

其他read选项不会产生此错误。例如,我可以这样做:

#/bin/bash
echo -n "What is your name?"
read username
echo "Hello, ${username}"

no coprocess 错误从何而来?这是什么意思?我该怎么办?

答案1

当您使用 时source,是当前 shell 读取该文件,而不是该#!行提到的 shell。我假设您的 shell 是zshorksh93它用于read -p从协进程中读取数据。

一个例子ksh93

cat /etc/passwd |&

while IFS=":" read -p user rest; do
    printf 'There is a user called %s\n' "$user"
done

跑步你的脚本,要么明确提及解释器:

$ bash script.sh

...或者使脚本可执行并运行它:

$ chmod +x script.sh
$ ./script.sh

要在和read中使用自定义提示:zshksh93

read username"?What's you name? " 
printf 'Hello %s!\n' "$username"

相关内容