相关疑难解决方法(0)

如何检查管道是否为空并对数据运行命令(如果不是)?

我在 bash 脚本中输入了一行,并想在将它提供给程序之前检查管道是否有数据。

搜索我找到了,test -t 0但在这里不起作用。总是返回假。那么如何确定管道有数据呢?

例子:

echo "string" | [ -t 0 ] && echo "empty" || echo "fill"
Run Code Online (Sandbox Code Playgroud)

输出: fill

echo "string" | tail -n+2 | [ -t 0 ] && echo "empty" || echo "fill"
Run Code Online (Sandbox Code Playgroud)

输出: fill

测试上述管道是否产生输出的标准/规范方式不同需要保留输入以将其传递给程序。这概括了如何将输出从一个进程传送到另一个进程,但仅在第一个进程有输出时才执行?专注于发送电子邮件。

shell bash pipe

73
推荐指数
7
解决办法
8万
查看次数

在管道到另一个命令之前完全缓冲命令输出?

有没有办法只在没有临时文件的情况下执行另一个命令?我有一个运行时间更长的命令和另一个用于格式化输出并使用 curl 将其发送到 HTTP 服务器的命令。如果我只是执行commandA | commandBcommandB将启动curl,连接到服务器并开始发送数据。因为commandA时间太长,HTTP 服务器会超时。我可以随心所欲commandA > /tmp/file && commandB </tmp/file && rm -f /tmp/file

出于好奇,我想知道是否有办法在没有临时文件的情况下做到这一点。我试过了,mbuffer -m 20M -q -P 100但卷曲过程仍然从一开始就开始了。Mbuffer 等待直到commandA实际发送数据完成。(数据本身最多只有几百 kb)

shell pipe buffer

16
推荐指数
2
解决办法
9885
查看次数

如果第一个命令失败,则阻止第二个命令在 bash 管道中启动

在学习(或多或少)一些关于管道的有用讨论后,例如 获取通过管道传输到另一个进程的进程的退出状态管道中的一个进程失败时退出,我仍然无法避免在第一个命令失败时启动第二个命令。我是否缺少有关管道的基本细节?

所以例如

$ somecommand | tar -T - -czf /tmp/someProject.tar.gz
Run Code Online (Sandbox Code Playgroud)

tar.gz如果somecommand不能正常工作并且只产生一些错误消息而不是预期的文件列表,则不应创建几乎为空的文件。

bash zsh pipe

11
推荐指数
2
解决办法
1034
查看次数

标签 统计

pipe ×3

bash ×2

shell ×2

buffer ×1

zsh ×1