我有经常使用“read -p”(stderr输出)的复杂bash脚本。现在我需要将所有脚本输入从终端复制到日志文件中。
tee file.log | script.sh
此命令不能正常工作,因为忽略输出给用户。 例如:
#!/bin/sh
echo "start"
read -p "input value: " val
echo $val
echo "finish"
终端运行:
start
input value: 3
3
finish
开球:
# tee file.log | ./script.sh
start
3
3
finish
答案 0 :(得分:1)
不知道为什么你在这里使用tee
。我怀疑发生的是它需要输入,所以等待它,然后管道3到stdout
-p prompt
Display prompt, without a trailing newline, before attempting
to read any input. The prompt is displayed only if input is coming from a
terminal.
但是输入不是从tty发送的,因此永远不会打印提示。我仍然觉得在这里使用tee
非常奇怪,但您可以使用echo -n
代替-p
的{{1}}标记,它应该有用。
read
e.g。
#!/bin/sh
echo "start"
echo -n "input value: "
read val
echo $val
echo "finish"
也不确定如何让tee在脚本中正确终止,所以你需要在结束时按回车键,这当然会导致换行。
那就是说,因为每次都是额外的一行,看起来比每次做> tee file.log | ./abovescript
start
input value: 3
3
finish
> cat file.log
3
更糟糕,尽管更好的选择就是使用函数
echo "$val" >> file.log