tee我见过的所有用法都是这样的:
do_something | tee -a logfile
Run Code Online (Sandbox Code Playgroud)
或者:
do_something_else | tee logfile
Run Code Online (Sandbox Code Playgroud)
是tee为那些不知道你可以用 shell 管道重定向做同样的事情的人发明的吗?如:
do_something >> logfile
Run Code Online (Sandbox Code Playgroud)
或者:
do_something_else > logfile
Run Code Online (Sandbox Code Playgroud)
它实际上是一样的,而且打字所需的键盘敲击次数更少。我没有看到哪些隐藏功能tee?
ls -l --color=auto | tee output.log
Run Code Online (Sandbox Code Playgroud)
没有管道/三通,它是彩色的。我怎样才能使它在使用时保持着色tee(只能在屏幕上着色,我不关心日志中的颜色)。
我正在使用| sudo tee FILENAME能够写入或附加到经常需要超级用户权限的文件。
尽管我理解为什么它在某些情况下很有用,但它tee也会再次将其输入发送到 STDOUT,但我从未真正将其tee用于任何有用的部分。在大多数情况下,如果我不采取额外的步骤并使用tee 1> /dev/null.
我的问题:是否有一个命令 arround,它的作用与 完全相同tee,但默认情况下不向 STDOUT 输出任何内容?
我使用此命令查看控制台和文件中的输出:
powershell -command "my_command_1 | tee ('logs\{0}.log' -f (Get-Date -format 'yyyy.MM.dd-HH.mm'))"
powershell -command "my_command_2 | tee ('logs\{0}.log' -f (Get-Date -format 'yyyy.MM.dd-HH.mm'))"
# etc
Run Code Online (Sandbox Code Playgroud)
它的效果没有我预期的那么好,我有一些问题:
输出工作非常奇怪。对于某些命令,在打印文本和更新控制台/文件之间存在巨大的延迟。对于其他一些命令,输出似乎在打印文本时更新(我运行没有 tee 的命令,我知道它应该打印什么)。这种延迟使这款 T 恤几乎毫无用处 - 如果将打印一些严重错误,因此我需要停止该命令,但我什么也看不到,直到为时已晚怎么办?
对于某些命令,仅在完成完整命令后才会打印输出。
这些问题有解决方案吗?如果没有,PowerShell 中的这个 tee 东西是完全没用的。
标题基本上说明了一切。tee有一个选项--ignore-interrupts:
-i, --ignore-interrupts ignore interrupt signals
Run Code Online (Sandbox Code Playgroud)
谁能解释/举一个例子,在哪种情况下这很重要?谢谢!
我使用“tee”命令来将长 bash 命令的结果捕获到文件中。
我用 tee 发出的文件可以以某种方式在每行前面加上写入该行时的时间戳吗?我正在寻找一种解决方案,其中每行都有不同的日期时间值...而不是每行上的前缀相同的值。
我想要这个的原因是,当我阅读文件以了解慢速区域在哪里时,了解每行何时发出将非常有用。
我想使用 netcat 作为代理来记录 http 请求和对文件的响应,然后跟踪这些以检查流量。想想wireshark。
尝试了以下其中“fifo”是命名管道,“in”和“out”是文件,端口 8080 上的 netcat 代理,端口 8081 上的服务器。
虽然是真的;做猫fifo | nc -l -p 8080 | tee -a in | nc 本地主机 8081 | tee -a out 1>fifo; 完毕
问题:
Netcat 在第一次请求后停止响应(忽略循环?)。
localhost [127.0.0.1] 8081 (tproxy) : Connection refused如果服务器在 8081 上不可用,Netcat 将失败并显示 msg 。 问:是否可以在发出请求时“延迟”连接到 8081?即我不想让 8081 在 netcat 启动时运行。
我熟悉使用 tee,我知道我可以简单地记录输出
script.sh | tee file.log
Run Code Online (Sandbox Code Playgroud)
但是,我想要一个无缝的用户界面。有没有办法在 script.sh 中像上面那样运行 tee ?在这个脚本中,有数百个回声和许多其他正在运行的脚本,很难将每个脚本单独附加到文件中。
我用它来检查日志文件的日志行,直到发生特定事件(取自此答案“监视文件直到找到字符串”):
(tail -f -n 0 test.log &) | grep -q 'SPEFICIC LOG MESSAGE'
Run Code Online (Sandbox Code Playgroud)
这可行,但我还希望在等待事件时将日志行打印到标准输出。我正在寻找类似的东西tee,但我想同时打印和管道。
我尝试了这个答案来管道并观察管道输出?, 导致:
(tail -f -n 0 test.log &) | tee /dev/fd/2 | grep -q 'SPEFICIC LOG MESSAGE'
Run Code Online (Sandbox Code Playgroud)
但随后该命令永远不会退出,大概是因为在找到匹配项时grep无法中断,因此继续将数据传送到?tailtailtee
some_source | (tee /dev/stderr | sink_1) 2>&1 | sink_2
Run Code Online (Sandbox Code Playgroud)
好像失败了。
如何在没有任何临时性的情况下做到正确?
我正在创建一个大型tar档案,我也想创建档案的校验和。我可以这样实现:
$ tar cfz archive.tar.gz files
$ sha256sum archive.tar.gz > archive.tar.gz.sha256sum
Run Code Online (Sandbox Code Playgroud)
但是存档文件很大并且在慢速媒体上,所以我不想在写出来后重新读一遍。
我可以构建一个在写入文件时对文件进行哈希处理的管道吗?我想也许我可以使用该tee实用程序来做到这一点,但这只会写入文件,而不是写入另一个命令的标准输入。
tee ×11
bash ×5
linux ×4
stderr ×2
checksum ×1
command-line ×1
grep ×1
logging ×1
named-pipe ×1
netcat ×1
pipe ×1
posix ×1
powershell ×1
shell ×1
tar ×1