2013-10-01 67 views
0

回顾Dokku source code,我注意到管道和重定向的两种用法,我不熟悉。管道和猫重定向

之一是:cat | command

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

另一种是cat > file

例子: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")

什么用管以及在两种情况下重定向?

+0

你知道'猫'是什么吗?以及它没有参数呢? –

+0

是的,我认为它的使用方式不同。 – ustun

+0

http://partmaps.org/era/unix/award.html可能是相关的 – cdarke

回答

1

通常情况下,这两种用法都是无用的。

cat没有参数从标准输入读取,并写入标准输出。

cat | command相当于command

&& cat >file>file等价,假设前面的命令处理stdin输入。

更仔细地看,第二个例子中cat命令的唯一目的是从标准输入读取。没有它,你会将mkdir的输出重定向到文件。因此,该命令首先确保该目录存在,然后通过stdin向文件写入任何内容。

+0

好的,看起来这些用法部分是由于作者的无知,但你的第二点可能是关键。 – ustun

+0

我想知道为什么这不起作用,也许我正在寻找一些东西: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“) – ustun