2017-06-15 29 views
1

我有这样的:回显到标准输出,并追加到文件

echo "all done creating tables" >> ${SUMAN_DEBUG_LOG_PATH} 

但应该只是追加到该文件,不写入stdout。 如何写入标准输出并追加到同一条bash文件中?

+0

它写入标准输出,这是文件 –

+0

嗯好吧,我想你是对的..我怎么能管道标准输出到“控制台”/当前的TTY呢?你知道我在问什么:) –

回答

4

像这样的事情?

echo "all done creating tables" | tee -a "${SUMAN_DEBUG_LOG_PATH}" 
+0

是啊,它看起来像它的作品 - 任何想法,如果三通很容易在任何* nix机器上?似乎在马科斯工作。 –

+0

噢,是的......我想你会发现它无处不在。在Linux下,它是coreutils的一部分 – mauro

+0

['tee'](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/tee.html)是POSIX标准的一部分。 – chepner

2

使用tee命令

$ echo hi | tee -a foo.txt 
hi 
$ cat foo.txt 
hi 
+0

哦,废话,我忘了问,这会发送stderr到TTY和文件? –

1

通常开球时使用,但只使用bash的一个版本:

#!/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}" 
+0

这是一个在纯'bash'中执行它并不能真正帮助你的情况。你需要为管道的RHS分叉一个新的进程,所以你可以在这个过程中运行'tee'而不是'bash'。 – chepner

+0

这取决于将要发生多少日志记录。如果这很多,一个exec>>()也可以工作,但确实是一个额外的分叉。这一切只取决于是否有可用的T恤。但是tee无法为数据添加前缀和数据,但仍然可以在bash中执行此操作。 – CowboyTim

+0

@chepner thx用于改进,但用于windowsy文件名的“$ fn”也需要fn =“$ 1” :-) – CowboyTim

相关问题