“exec bash”适用于 bash 命令行,但不适用于脚本。该工具拒绝响应:“提供的文件不是控制台”。什么解决方法?

“exec bash”适用于 bash 命令行,但不适用于脚本。该工具拒绝响应:“提供的文件不是控制台”。什么解决方法?

我想发送一个命令到牧场主容器来了解其文件。

当我在命令行上运行它时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")

相关内容