我知道怎么用tee
,当然,我已经用过很多次了。然而,它通常是这样的:
du -h /some/directory | sort -h | tee census
虽然这工作正常,但这意味着我直到快结束时才看到任何内容,因为sort
需要收集du
.我认为如果可以做一些事情可能会很好:
du - h | tee stderr | sort -h > census
其中显然stderr
是一些表示真实误差输出通道的符号。我在相当稀疏的文档中没有找到任何内容 - 这可能吗?
我知道怎么用tee
,当然,我已经用过很多次了。然而,它通常是这样的:
du -h /some/directory | sort -h | tee census
虽然这工作正常,但这意味着我直到快结束时才看到任何内容,因为sort
需要收集du
.我认为如果可以做一些事情可能会很好:
du - h | tee stderr | sort -h > census
其中显然stderr
是一些表示真实误差输出通道的符号。我在相当稀疏的文档中没有找到任何内容 - 这可能吗?
如果我们想将刚刚在 stdin 中写入的内容复制粘贴到 stdout,我们可以使用 redirect>
或 append >>
。
tee
从标准输入写入标准输出有何不同?
说我有:
$ cat tmp1.txt
a
b
c
然后
$ paste tmp1.txt <(tr '[:lower:]' '[:upper:]'<tmp1.txt)
a A
b B
c C
我将如何将以上内容修改为
1/ 只调用tmp1.txt
一次?(我怀疑tee
)
2/ 提供tmp1.txt
来自终端的内容(就像由命令的输出产生的一样)。为此,我试图对此进行修补,但并没有走得太远:
$ cat<< 'EOF' | tee >(tr '[:lower:]' '[:upper:]')
a
b
c
EOF
输出:
a
b
c
A
B
C
我正在尝试将 pg_dump 推送到 2 psql 和日志文件,但我不想给终端添加噪音。
在tee
工具的众多帖子之后,我得到了这个命令,除了控制台仍然被淹没之外,它确实有效。
pg_dump -a -t table-country -p 5432 -U usr db-maint2 2>&1 | tee >(psql -p 5432 -U postgres db-project) >(psql -p 5432 -U postgres db-gp-projet) >"initDB_$(date +%Y%m%d_%H%M).log"
我已经阅读了周围,但我没有找到更好的解决方案。
此外,来自 pg_dump 的标准输出在我的命令之后显示在控制台中,但是来自两个 psql 的日志仅发送到终端而不是日志文件。
编辑:好的,我找到了如何将 psql 输出到日志文件:
pg_dump -a -t table-country -p 5432 -U usr db-maint2 2>&1 | tee >(psql -p 5432 -U postgres db-project >"initDB_$(date +%Y%m%d_%H%M).log") >(psql -p 5432 -U postgres db-gp-projet >"initDB_$(date +%Y%m%d_%H%M).log") >"initDB_$(date +%Y%m%d_%H%M).log"
实际上,它只记录一个 psql 命令,即使-a
使用 tee 添加句柄也只会在 file.log 中创建一个 psql 输出。
编辑第 n :没有更多的想法。
编辑 n^th + 1 :ofc,我的大脑终于醒了。
我有 100 多个 rar 文件,我想使用 findexec
命令提取这些文件。我想查看通常的 rar 输出,以便我可以监视其进度,并将输出通过管道传输到grep
然后再传输到wc
以计算“所有正常”行(如果成功提取存档,rar 将打印)。
我使用以下命令(没有最终wc -l
组件)进行了测试,该命令旨在查找 2 个 rar 档案,但它只是打印了 4 行“一切正常”,提取的 2 个 rar 档案中的每一个都打印了 2 行。
$ find -iname 'TestNum*.rar' -execdir rar e '{}' \; | tee - | grep -i 'All OK'
All OK
All OK
All OK
All OK
Note: 2 archives extracted, but 4 'All OK' lines, and none of rar's output.
我想要的是这样的:
$ find -iname 'TestNum*.rar' -execdir rar e '{}' \; | ... ???
Extracting from TestNum1.rar
All OK
Extracting from TestNum2.rar
All OK
2
最后一行只有 2 是wc -l
输出,显示“一切正常”的实际匹配数。
这可能吗?谢谢。
编辑@ 2018-04-25 19:21
我刚刚意识到我可以做以下工作正常:
find . -iname 'TestNum*.rar' -execdir rar e '{}' \; | tee rar_out
grep -i 'All OK' rar_out | wc -l
我最初问的可能还是出于兴趣?
如果默认情况下在 CLI 程序 stdout 到文件中,我找不到,我能做什么,该文本输出到多个文件。
我使用generate-changelog包。在这个包中默认输出打印到文件,而不是控制台。
我想将相同的输出添加到 2 个文件:
SashaVersion.txt
— 文件,我只想在其中添加一次标准输出;CHANGELOG.md
— 文件,我想在其中多次添加标准输出;这个文件不是必须覆盖的。-f
参数 - changelog -f SashaVersion.txt -f CHANGELOG.md
。changelog -f | tee SashaVersion.txt CHANGELOG.md
。