linux read -p返回“read:无查询进程”使用korn shell ksh

yrwegjxp  于 2023-03-22  发布在  Linux
关注(0)|答案(5)|浏览(210)

创建了一个简单的shell文件,其中包含:

read -p ThePrompt TheSomthing
echo $TheSomething

运行它,它会返回

-ksh[1]: read: no query process

我试过单引号,双引号,手册页特别指出“-p”是使用提示符,但它对我不起作用。有人能告诉我我做错了什么吗?谢谢!

ecr0jaav

ecr0jaav1#

在Ksh中,你可以使用以下格式:
echo "ThePrompt\c" read TheSomthing echo $TheSomething

wfsdck30

wfsdck302#

Google的man page
-un和-p选项分别导致从文件描述符n或当前协同进程读取输入(有关此的注解,请参阅上面的协同进程)。如果使用-s选项,则将输入保存到历史文件。
要使用提示符,请改为这样写:

read TheSomething?'ThePrompt'
lc8prwob

lc8prwob3#

我在周围发现了一个词:
echo -n 'prompt:“read input 1 echo -n”提示符:'读取输入2. . .
我不知道为什么-p不能像手册页中描述的那样工作。如果有人有见解,请回复。
谢谢!

ql3eal8s

ql3eal8s4#

很抱歉重新提出这个问题,但我用KSH编写shell脚本,所以我也处于同样的困境,直到我提出这个问题。
我捕捉单个字符的解决方案:

$> echo -e "My prompt: \c" ; read -n 1 -s -r FOO ; echo -e "\b"
My prompt:
$> echo $FOO
d
$>

对于较长的字符串,请从读取命令中删除“-n 1”:

$> echo -e "My prompt: \c" ; read -s -r FOO ; echo -e "\b"
My prompt:
$> echo $FOO
this is my entry!!!
$>

很抱歉,这是你要找的页面!

sc4hvdpw

sc4hvdpw5#

我也遇到了同样的问题,找到了这篇文章。奇怪的是:在服务器A上,此语法工作正常
read -p "Prompt" -e -n 2 answer
在服务器B上,我得到错误:
-ksh: read: no query process
两台服务器都运行Redhat 7.9和ksh 93。保存RPM和内核的版本。尽管这是一个ksh脚本,但似乎服务器A使用的是read. Wierd的bash版本。
-n选项的行为也有所不同。
在serve A(bash)上,输入N会用N填充变量answer,同时,它会从输入中去掉所有空格。
在服务器B上,键入N将变量answer填充为N\r。
我的解决方案在两个服务器上都有效:
read -n 2 answer?'Prompt '``` answer=$( echo $answer | tr -d '[:cntrl:][:blank:]' )
其中read是@abacabadabacaba描述的格式
tr命令删除-d所有控制字符[:cntrl:]和所有白色[:blank:]

野性

相关问题