docker exec bash -c
条件文で使用される内容をエコーして、コンテナの代わりにホストに出力を保存しながら、Dockerコンテナ内でbashを実行しようとしています。 IPホスト名や文字列などの内容を再エコーできます。問題はecho
出力です。
$ var1=$(docker exec -t test_masternode1 bash -c 'echo 1')
$ echo $var1
1
$ declare -p var1
"eclare -- var1="1
$ var2=1
$ declare -p var2
declare -- var2="1"
$ echo $var2
1
$ if [ "$var1" == "$var2" ];then echo "same";else echo "not same";fi
not same
ご覧のとおり、両方var1
ともvar2
テストが失敗します。また、変数宣言の出力が誤ってソートされました。 Dockerコンテナの出力に問題があります。それが何であるかわからない。1
if
else
また、Ubuntuで別のDockerイメージを試してみました。上記の例はCentOS 7の例です。
$ var3=`docker run -t ubuntu bash -c 'echo 1'`
$ declare -p var3
"eclare -- var3="1
答え1
データはDockerからキャリッジリターンとして返されます。キャリッジリターン文字が出力されると、カーソルが行の先頭に移動します。だから変数の値を表示すると、出力が少し奇妙に見えます。これは他の人にとっても問題になるようです(または過去にありました)。このGitHubの問題。
データからキャリッジリターンを削除するには、次のように渡しますtr -d '\r'
。
var1=$(docker exec -t test_masternode1 bash -c 'echo 1' | tr -d '\r')
...またはオプションなしでコマンドを実行してください-t
。この-t
オプションは、対話型コマンドにのみ実際に必要な疑似TTYをdocker exec
割り当てます。docker run
このコマンドはecho 1
そのようなコマンドではありません。