我有复杂的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"