我有这个:
echo "all done creating tables" >> ${SUMAN_DEBUG_LOG_PATH}
但这只会将内容附加到文件中,而不会将其写入标准输出。我如何在同一行中向标准输出写入内容并将其附加到文件中?
像这样的吗?
echo "all done creating tables" | tee -a "${SUMAN_DEBUG_LOG_PATH}"
tee
是POSIX标准的一部分。 - chepnermy_command 2>&1 | tee -a my_log
- mauro使用tee
命令
$ echo hi | tee -a foo.txt
hi
$ cat foo.txt
hi
#!/bin/bash
function mytee (){
fn=$1
shift
IFS= read -r LINE
printf '%s\n' "$LINE"
printf '%s\n' "$LINE" >> "$fn"
}
SUMAN_DEBUG_LOG_PATH=/tmp/abc
echo "all done creating tables" | mytee "${SUMAN_DEBUG_LOG_PATH}"
bash
并不能真正帮助你。无论如何,您都需要为管道的RHS分叉一个新进程,因此最好在该进程中运行tee
而不是bash
。 - chepnerfn="$1"
不会有任何问题,但也并非必要;在赋值语句的右侧不执行单词分割或路径名扩展。 - chepnerbar='one two'
,foo=($bar)
将生成一个带有元素的数组,但是 foo=([0]=$bar)
不会,我猜测这是由于复合赋值内部的简单赋值造成的。 - chepner