我正在编写一个脚本,通过管道(stdin)接收输入,例如 (
以下是一个示例脚本。
它的工作原理如下:
它跳过了我最后的
然而;
other_command | my_script
)。但是,在我读取完整个stdin后,我需要暂停脚本并等待用户按下回车键。以下是一个示例脚本。
#!/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
$
在从标准输入读取后,如何使read
函数正常工作?是否有适用于Linux和OSX的解决方案?
tty
会说not a tty
。否则是/dev/ttys006
。因此,read < "/dev/ttys006"
可以工作,但不可行。 - xeor"$(tty)"
只是简单地执行tty
并将结果用引号括起来。tty
会返回类似于/dev/ttys006
的结果(根据系统/终端的不同)。所以"$(tty)"
应该恰好是"/dev/ttys006"
。在你的终端中执行以下命令来检查:( mytty="$(tty)"; echo "tty: $mytty" )
。 - David C. Rankinecho "tty" > test; sh test; echo string | sh test
在我的 OSX 和 Linux 测试中都会显示一行/dev/ttys006
和一行not a tty
。 - xeor