Bash 使用cat进行管道和重定向

Bash 使用cat进行管道和重定向,bash,cat,Bash,Cat,通过查看,我注意到pipe和redirect的两种用法我并不熟悉 一种是:cat|命令 示例:id=$(cat | docker run-i-a stdin progrium/buildstep/bin/bash-c“mkdir-p/app&&tar-xC/app”) 另一个是cat>文件 示例:id=$(cat“$HOME/$APP/ENV”| docker run-i-a stdin$IMAGE/bin/bash-c“mkdir-p/APP/.profile.d&&cat>/APP/.pro

通过查看,我注意到pipe和redirect的两种用法我并不熟悉

一种是:
cat|命令

示例:
id=$(cat | docker run-i-a stdin progrium/buildstep/bin/bash-c“mkdir-p/app&&tar-xC/app”)

另一个是
cat>文件

示例:
id=$(cat“$HOME/$APP/ENV”| docker run-i-a stdin$IMAGE/bin/bash-c“mkdir-p/APP/.profile.d&&cat>/APP/.profile.d/APP ENV.sh”)


管道和重定向在这两种情况下有什么用?

通常,这两种用法都是完全无用的

cat
不带参数从stdin读取数据,然后写入stdout

cat |命令
等同于
命令

&&cat>文件
等同于
>文件
,假设前面的命令处理了stdin输入


更仔细地看,第二个示例中的
cat
命令的唯一目的是从stdin读取数据。如果没有它,您将把
mkdir
的输出重定向到该文件。因此,该命令首先确保目录存在,然后将通过stdin提供给它的任何内容写入文件。

您知道
cat
的作用吗?它在没有争论的情况下做了什么?是的,我认为它的使用方式有所不同。可能是相关的好吧,看起来这些用法部分是由于作者的无知,但你的第二点可能是关键。我想知道为什么这不起作用,也许我在看一些东西:id=$(docker run-I-a stdin$IMAGE/bin/bash-c“mkdir-p/app/.profile.d&&cat“$HOME/$app/ENV”>/app/.profile.d/app ENV.sh”)