我想发送一个命令到牧场主容器来了解其文件。
当我在命令行上运行它时bash
:
rancher --url ... --access-key ... --secret-key ... --env 1a5 exec 1i845011 bash -c 'find /opt/ -name states.xml'
它返回我想要的文件列表。
但是当我在.sh
脚本中运行它时,按照以下方式或用 ` 包围,它会失败:
# The command line that is in my .sh script :
ALL_STATES_FILES=$(rancher $AUTHENTICATION --env $ID exec $CONTAINER_ID bash -c "find /opt/ -name states.xml")
# fails, mentioning this if I ran my script with a `bash -x` :
rancher --url ... --access-key ... --secret-key ... --env 1a5 exec 1i845011 bash -c 'find /opt/ -name states.xml'
ALL_STATES_FILES='time="2021-02-11T14:41:56+01:00" level=fatal msg="provided file is not a console" '
我尝试在 后添加-t
和-i
选项exec
,但没有成功。
那条奇怪的信息,“提供的文件不是控制台“,似乎来自一个去脚本/源代码,如果我通过互联网搜索它。因此,它可以是一个错误牧场主1.6我正在使用或去它使用的版本。
.sh
不管怎样,我的脚本中是否有解决方法来用rancher
我发送给它的命令来引诱它?让它相信它是它所针对的控制台输出,因为它似乎对它很重要?
答案1
我没有找到根本原因,但我的一位同事找到了解决该问题的方法。
- 安装软件包
expect
。 unbuffer
之前添加命令rancher
这是在脚本中工作的:
ALL_STATES_FILES=$(unbuffer rancher $AUTHENTICATION --env $ID exec $CONTAINER_ID bash -c "find /opt/ -name states.xml")