我正在创建一个通过管道(stdin)获取输入的脚本,如(other_command | my_script).但是,在我读完整个标准输入后,我需要暂停脚本并等待用户按下回车键.
这是一个示例脚本.
#!/bin/bash
if [[ -t 0 ]]; then
echo "No stdin"
else
echo "Got stdin"
while read input; do
echo $input
done
fi
echo "Press enter to exit"
read
它就是这样的;
$echo text | ./script
Got stdin
text
Press enter to exit
$
它跳过我最后的阅读.
然而;
$./script
No stdin
Press enter to exit
stops here
$
从stdin读取后,如何让读取工作?是否有适用于Linux和OSX的解决方案?
解决方法:
您想要从用户那里读取.如果stdin不是用户,则必须从其他地方读取.典型的选择是当前终端(这里是连接到stderr的终端,假设有一个终端).
read -p "Press enter" < "$(tty 0>&2)"
默认情况下,tty在stdin上找到tty的名称,当stdin是管道时,这显然不起作用.因此,我们重定向使其看起来更像stderr.