脚本不执行没有 tty 的命令

脚本不执行没有 tty 的命令

我试图用作scriptdocker 容器的入口点,将该容器中发生的所有情况记录到已安装卷上的文件中。如果有 tty,效果会很好:

$ docker run -t --rm --privileged -v $PWD:/log rhel7:7.7 /usr/bin/script /log/out.script --timing=/log/out.timing -f -e -c 'echo "hello world"; sleep 10; echo "goodbye world"'
Last login: Tue Jan 21 00:45:14 UTC 2020 on pts/41
Script started, file is /log/out.script
hello world
goodbye world
Script done, file is /log/out.script

但是,如果我删除 TTY,脚本不会执行任何“-c”命令:

$ docker run --rm --privileged -v $PWD:/log rhel7:7.7 /usr/bin/script /log/out.script --timing=/log/out.timing -f -e -c 'echo "hello world"; sleep 10; echo "goodbye world"'
Last login: Tue Jan 21 00:50:39 UTC 2020 on pts/41
Script started, file is /log/out.script
Script done, file is /log/out.script
$ ls -s out.*
0 out.script  0 out.timing

不幸的是,我计划运行的环境没有容器的 TTY。脚本出现这种行为的原因是什么?有办法解决吗?

答案1

script命令旨在捕获终端输出。没有终端,它就无法工作。

您可能想查看tee命令:

foo 2>&1 | tee /my/output

将把 的输出发送foo到标准 docker 输出将其复制到指定文件中。

相关内容