2016-08-05 46 views
0

我看到一些奇怪的行爲從docker run獲得輸出到bash變量。`碼頭運行'輸出到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 

輸出

/ 
abc/
xyz/ 

的問題是在最後echo ...

回答

1

您需要修改docker run --rm -ti ubuntu pwd 2>&1docker run --rm ubuntu pwd 2>&1 probabilly互動和TTY模式在shell變量中無法正常工作

+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' 

另外,不要依靠輸出docker run,因爲如果ubuntu image已不存在,它也將被拉到和的消息「拉圖像「將成爲輸出的一部分。

1

碼頭工人-t選項分配用於處理以輸出到僞終端。 TTY使用CRLF作爲結尾,與unix中通常的LF不同。

在你的例子輸出中的「XYZ」是覆蓋從行開始正文的其餘部分由於存儲在變量回車。

od實用程序可以轉儲十六進制或八進制值。

$ 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和可能檢查錯誤,而不是重定向到stderrstdout。除非過程需要stdin,否則不需要-i

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

感謝您的額外信息!真正有用的知道。 – gingerlime