如何使用-s选项创建shell脚本(/bin/sh)并读取内部输入

如何使用-s选项创建shell脚本(/bin/sh)并读取内部输入,shell,pipe,posix,sh,Shell,Pipe,Posix,Sh,我想像这样运行一个shell脚本(POSIX) #!/bin/sh # this is a.sh echo your age? read age echo "You are $age." 如果通过标准输入将其作为 cat a.sh | /bin/sh -s 然后跳过这个问题 我如何提问?试试-n选项 echo -n "your age?" read age echo "Your age $age" 问题在于/bin/sh正在读取脚本,而您的脚本正在从同一输入文件读取输入:由cat a.sh

我想像这样运行一个shell脚本(POSIX)

#!/bin/sh
# this is a.sh
echo your age?
read age
echo "You are $age."
如果通过标准输入将其作为

cat a.sh | /bin/sh -s
然后跳过这个问题

我如何提问?

试试-n选项

echo -n "your age?"
read age
echo "Your age $age"

问题在于
/bin/sh
正在读取脚本,而您的脚本正在从同一输入文件读取输入:由
cat a.sh馈送的管道

/bin/sh a.sh
一种解决方案是修改脚本以直接从终端读取,而不是标准输入,尽管这可能不是您想要的

echo "your age?"
read age < /dev/tty
echo "Your age $age"

您这样运行它而不是
/bin/sh a.sh
有什么原因吗?问题是
a.sh
从调用
/bin/sh
继承了它的标准输入,后者的标准输入是
a.sh
/bin/sh
读取第一行和第二行,但是您的
read
语句读取第三行。由于不再有可供
/bin/sh
读取的输入,因此退出。