2013-10-01 66 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