`docker run` salida a variable bash – comportamiento extraño

Estoy viendo un comportamiento extraño que hace que la salida de docker run en una variable bash.

Ejemplo simple:

 #!/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 

salida

 / abc / xyz/ 

El problema está en el último echo

necesita modificar la docker run --rm -ti ubuntu pwd 2>&1 con la línea docker run --rm ubuntu pwd 2>&1 probabilly el modo interactivo y tty no funciona bien en las variables de la carcasa

La opción Dockers -t asigna un pseudo terminal para que el process salga. Un TTY usa un CRLF para un final de línea diferente al LF habitual en Unix.

El "xyz" en su salida de ejemplo sobrescribe el rest del text desde el inicio de la línea debido al retorno de carro almacenado en la variable.

La utilidad od puede volcar los valores hexadecimales o octales.

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

057 = / 015 = CR 012 = LF

Entonces la salida normal.

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

Elimine -t y posiblemente compruebe si hay errores en lugar de networkingirigir stderr a stdout . -i no es obligatorio a less que el process requiera stdin .

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

Los caracteres \r\n están presentes en el resultado:

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

Además, no confíe en la salida para la docker run , porque si la ubuntu image no está presente, también se extraerá y los posts de "Tirando image" formarán parte de la salida.