如何知道命令是否适用于管道?

提问

我看到了这个命令:

docker inspect --format '{{.State.Running}}' $(docker ps -lq)

还有这个:

docker ps -l -q|while read cid b; do docker inspect -f '{{ .State.Running }}' $cid; done;

我的问题是为什么它不能写成:

docker ps -l -q|docker inspect -f '{{.State.Running}}'

如果那是因为docker inspect对管道不起作用,我怎么知道哪个命令可以,哪个不可以?

最佳答案

Pipe获取第一个程序的输出并将其传递给下一个程序.从某种意义上说,它假装是用户在终端中输入第二个程序的输入.因此,如果您可以运行程序并在程序运行时键入(例如)要操作的文件列表,那么您可以使用管道执行相同的操作.

您可能会看到在程序手册中使用管道可以完成的操作的提示.例如,man wget提到-i参数,而-i – 将从标准输入读取文件,也称为STDIN.所以你可以cat list-of-links.txt | wget -i – 或者更有效的wget -i – <列表中,links.txt.