コンテナ内でいくつかのコマンドを実行したいのですが、2番目のコマンドはコンテナ内で実行したくないので、ファイルはgrep
コンテナのホームディレクトリにありません。誰も同じ問題がありますか?
# Throughput
docker exec -i container_client bash << EOF >> mystatistics.xls
(sockperf throughput --tcp --msg-size=256 -i $ipaddcontainer -p 12345 -t 10)> my_output_file_troughput.txt
echo "Bridge mode" "," `grep 'BandWidth is ' my_output_file_troughput.txt | cut -d ' ' -f 5`
exit
EOF
ベストアンサー1
here-docsを使用するときは、マークアップを引用するときと引用しないときの違いを覚えておく必要がありますEOF
。 qoutes がない場合、すべてのコマンドの置き換えは、Docker ではなくデフォルトのシェルで行われます。次の2つを比較します。
$ cat <<EOF
$(echo ok)
EOF
ok
そして:
$ cat <<"EOF"
$(echo ok)
EOF
$(echo ok)
したがって、コマンド(コマンド置換を含む)をDockerに渡すには、このトークンを参照する必要があります。
さて、
- しかし、なぜsubshellを使いたいのですか
sockperf
? - ダニは廃止され、新しい構文はです
$()
。