如何将标准输入复制到文件中



我有复杂的bash脚本,经常使用"read -p"(stderr输出)。现在我需要将所有脚本输入从终端复制到日志文件中。

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

不知道你为什么在这里使用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标志进行read,它应该可以工作。

#!/bin/sh
echo "start"
echo -n "input value: "
read val
echo $val
echo "finish"

例如

> tee file.log | ./abovescript
start
input value: 3
3
finish
> cat file.log
3

也不确定如何让 tee 从这里的脚本中正确终止,所以你需要在最后按回车键,这当然会导致换行符。

也就是说,由于每次都是额外的行,似乎比每次都做echo "$val" >> file.log更糟糕,尽管更好的选择是只使用一个函数

#!/bin/bash
r() {
read -p "input value: " val
echo "$val" >> file.log
echo "$val"
}
echo "start"
val=$(r)
echo "$val"
echo "finish"

相关内容

  • 没有找到相关文章

最新更新