如何将stdin复制到文件中

时间:2014-01-23 06:35:23

标签: linux bash copy stdin tee

我有经常使用“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

1 个答案:

答案 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