如何将多个命令通过管道传输到 bash?
how to pipe multi commands to bash?
我想检查远程网站上的一些文件。
这里是bash命令生成计算文件md5
的命令
[root]# head -n 3 zrcpathAll | awk '{print }' | xargs -I {} echo wget -q -O - -i {}e \| md5sum\;
wget -q -O - -i https://example.com/zrc/3d2f0e76e04444f4ec456ef9f11289ec.zrce | md5sum;
wget -q -O - -i https://example.com/zrc/e1bd7171263adb95fb6f732864ceb556.zrce | md5sum;
wget -q -O - -i https://example.com/zrc/5300b80d194f677226c4dc6e17ba3b85.zrce | md5sum;
然后我将输出的命令传送到 bash,但只执行了第一个命令。
[root]# head -n 3 zrcpathAll | awk '{print }' | xargs -I {} echo wget -q -O - -i {}e \| md5sum\; | bash -v
wget -q -O - -i https://example.com/zrc/3d2f0e76e04444f4ec456ef9f11289ec.zrce | md5sum;
3d2f0e76e04444f4ec456ef9f11289ec -
[root]#
请您尝试以下方法:
while read -r _ _ url _; do
wget -q -O - "$url"e | md5sum
done < <(head -n 3 zrcpathAll)
我们不应该把 -i
放在 "$url" 前面。
[关于-i选项的解释]
wget
的联机帮助页说:
-i file
--input-file=file
Read URLs from a local or external file. [snip]
If this function is used, no URLs need be present on the command line. [snip]
If the file is an external one, the document will be automatically treated as html if the Content-Type matches text/html.
Furthermore, the file's location will be implicitly used as base
href if none was specified.
其中 file
将包含 url 行,例如:
https://example.com/zrc/3d2f0e76e04444f4ec456ef9f11289ec.zrce
https://example.com/zrc/e1bd7171263adb95fb6f732864ceb556.zrce
https://example.com/zrc/5300b80d194f677226c4dc6e17ba3b85.zrce
而如果我们首先使用选项 -i url
,wget
将 url
下载为包含 url 行的文件
如上。在我们的例子中,url
是下载自身的目标,
不是 url 的列表,wget
导致错误:No URLs found in url
.
即使wget
失败,为什么命令只输出一行,而不是
md5sum
的结果是三行?
这似乎是因为 head
命令立即刷新了剩余的
管道子进程失败时的行。
我想检查远程网站上的一些文件。
这里是bash命令生成计算文件md5
的命令[root]# head -n 3 zrcpathAll | awk '{print }' | xargs -I {} echo wget -q -O - -i {}e \| md5sum\;
wget -q -O - -i https://example.com/zrc/3d2f0e76e04444f4ec456ef9f11289ec.zrce | md5sum;
wget -q -O - -i https://example.com/zrc/e1bd7171263adb95fb6f732864ceb556.zrce | md5sum;
wget -q -O - -i https://example.com/zrc/5300b80d194f677226c4dc6e17ba3b85.zrce | md5sum;
然后我将输出的命令传送到 bash,但只执行了第一个命令。
[root]# head -n 3 zrcpathAll | awk '{print }' | xargs -I {} echo wget -q -O - -i {}e \| md5sum\; | bash -v
wget -q -O - -i https://example.com/zrc/3d2f0e76e04444f4ec456ef9f11289ec.zrce | md5sum;
3d2f0e76e04444f4ec456ef9f11289ec -
[root]#
请您尝试以下方法:
while read -r _ _ url _; do
wget -q -O - "$url"e | md5sum
done < <(head -n 3 zrcpathAll)
我们不应该把 -i
放在 "$url" 前面。
[关于-i选项的解释]
wget
的联机帮助页说:
-i file
--input-file=file
Read URLs from a local or external file. [snip]
If this function is used, no URLs need be present on the command line. [snip]
If the file is an external one, the document will be automatically treated as html if the Content-Type matches text/html. Furthermore, the file's location will be implicitly used as base href if none was specified.
其中 file
将包含 url 行,例如:
https://example.com/zrc/3d2f0e76e04444f4ec456ef9f11289ec.zrce
https://example.com/zrc/e1bd7171263adb95fb6f732864ceb556.zrce
https://example.com/zrc/5300b80d194f677226c4dc6e17ba3b85.zrce
而如果我们首先使用选项 -i url
,wget
将 url
下载为包含 url 行的文件
如上。在我们的例子中,url
是下载自身的目标,
不是 url 的列表,wget
导致错误:No URLs found in url
.
即使wget
失败,为什么命令只输出一行,而不是
md5sum
的结果是三行?
这似乎是因为 head
命令立即刷新了剩余的
管道子进程失败时的行。