"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私が使っている行く使用するバージョンです。

.shrancherとにかく、私が送信するコマンドでスクリプトを誘引するための回避策はありますか?それが重要に見えるので、それが目標とするコンソール出力であると信じていますか?

ベストアンサー1

私は根本的な原因を見つけることができませんでしたが、同僚の一人が問題に対する解決策を見つけました。

  • パッケージをインストールしますexpect
  • unbuffer以前にコマンドを追加rancher

これはスクリプトで機能します。

ALL_STATES_FILES=$(unbuffer rancher $AUTHENTICATION --env $ID exec $CONTAINER_ID bash -c "find /opt/ -name states.xml")

おすすめ記事