docker运行`输出到bashvariables – 奇怪的行为
我看到一些奇怪的行为,从docker run
输出到bashvariables。
简单的例子:
#!/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
…
你需要修改docker run --rm -ti ubuntu pwd 2>&1
with docker run --rm ubuntu pwd 2>&1
可能交互式和tty模式在shellvariables中不能正常工作
Dockers -t
选项为进程分配一个伪terminal来输出。 TTY使用CRLF作为结尾,与unix中通常的LF不同。
由于存储在variables中的回车符,示例输出中的“xyz”将覆盖从行首开始的其余文本。
od
实用程序可以转储hex或八进制值。
$ docker run -t busybox pwd | od -b 0000000 057 015 012 0000003
057 = /
015 = CR
012 = LF
然后正常输出。
$ docker run busybox pwd | od -b 0000000 057 012 0000002
删除-t
并可能检查错误,而不是将stderr
redirect到stdout
。 -i
不是必需的,除非进程需要stdin
。
PWD=$(docker run --rm ubuntu pwd) [ "$?" == "0" ] || exit 1 echo "[$PWD]"
输出中出现字符\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
还没有出现,它也会被拉出来,“Pulling image”的消息将成为输出的一部分。
- 使用sudo运行docker-compose时,在docker-compose.yml文件中进行variablesreplace
- Docker中的Laravel没有识别环境variables
- 如何确认发送到docker run命令的环境variables是否被接收?
- docker-compose .env和direnv .envrc
- 尝试使用Install-Module在Windows Server 2016中安装Docker时出错
- Docker-用服务env_file编写错误
- 如何在docker的subprocesssupervisord环境中使用nodejs参数
- 在主pipe中使用docker环境-evariables
- Bashvariables在第三个远程服务器中