如何使用-s选项创建shell脚本(/bin/sh)并读取内部输入
我想像这样运行一个shell脚本(POSIX)如何使用-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
#!/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
读取的输入,因此退出。