我正在创建一个通过管道(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
$
跳过我的最后read
。
然而;
$ ./script
No stdin
Press enter to exit
stops here
$
从stdin读取后如何让read
工作?是否有适用于Linux和OSX的解决方案?
答案 0 :(得分:4)
您想要从用户那里阅读。如果stdin不是用户,则必须从其他地方读取。典型的选择是当前终端(这里是连接到stderr的终端,假设有一个终端)。
read -p "Press enter" < "$(tty 0>&2)"
默认情况下tty
在stdin上找到tty的名称,当stdin是一个管道时,这显然不会起作用。因此,我们重定向以使其看向stderr。