2016-08-05 3 views
0

docker runの出力をbash変数に取り込むのに奇妙な振る舞いがあります。`docker run`をbash変数に変えたときの奇妙な振る舞い

簡単な例:

#!/bin/bash 

PWD=$(docker run --rm -ti ubuntu pwd 2>&1) 
# also tried with PWD=`docker run ...` with same behaviour 
echo $PWD 
echo abc $PWD 
echo abc $PWD xyz 

出力の問題が最後echoである

/ 
abc/
xyz/ 

...あなたはdocker run --rm -ti ubuntu pwd 2>&1 probabilly docker run --rm ubuntu pwd 2>&1 インタラクティブおよびTTYに変更する必要があります

答えて

1

シェル変数でモードが正しく動作しない

+0

ビンゴ!それはいつも奇妙な行動を生み出す小さなミスです。本当にありがとう!!! – gingerlime

0

文字\r\nが出力に存在している。また

$ docker run --rm -ti ubuntu pwd 2>&1 > /tmp/docker.out 
$ cat -A /tmp/docker.out 
/^M$ 
$ python -c "import sys; print repr(sys.stdin.read())" < /tmp/docker.out 
'/\r\n' 

ubuntu imageが存在しない場合、それはまた引っ張って」のメッセージがされますので、docker runための出力に依存しませんプルイメージ "が出力の一部になります。

1

Dockers -tオプションは、出力するプロセスに擬似端末を割り当てます。 TTYは、UNIXの通常のLFとは異なり、行末にCRLFを使用します。

例出力の "xyz"は、変数に格納されているキャリッジリターンのために、行の先頭から残りのテキストを上書きします。

odユーティリティは、16進数または8進数の値をダンプできます。正常出力次に

$ docker run -t busybox pwd | od -b 
0000000 057 015 012              
0000003 

057 = /015 = CR012 = LF

$ docker run busybox pwd | od -b 
0000000 057 012               
0000002 

-tを削除し、おそらくかなりstdoutstderrをリダイレクトするよりもエラーをチェック。プロセスにstdinが必要な場合を除き、-iは必須ではありません。

PWD=$(docker run --rm ubuntu pwd) 
[ "$?" == "0" ] || exit 1 
echo "[$PWD]" 
+0

余分な情報をありがとう!知っていると本当に便利です。 – gingerlime