![使用读取时出现“无协进程”错误](https://linux22.com/image/106020/%E4%BD%BF%E7%94%A8%E8%AF%BB%E5%8F%96%E6%97%B6%E5%87%BA%E7%8E%B0%E2%80%9C%E6%97%A0%E5%8D%8F%E8%BF%9B%E7%A8%8B%E2%80%9D%E9%94%99%E8%AF%AF.png)
我有一个名为 的 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 是zsh
orksh93
它用于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
中使用自定义提示:zsh
ksh93
read username"?What's you name? "
printf 'Hello %s!\n' "$username"