docker 容器 bash 脚本中的多个命令

docker 容器 bash 脚本中的多个命令

我想在容器内执行一些命令,但第二个命令不想在容器内执行,因此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,任何命令替换都将在主 shell 中执行,而不是在 Docker 中。比较这两个:

$ cat <<EOF
$(echo ok)
EOF

ok

和:

$ cat <<"EOF"
$(echo ok)
EOF

$(echo ok)

因此,如果您想将命令(包括命令替换)传递给 Docker,则应该引用该令牌。

顺便一提,

  1. 顺便说一句,你为什么要使用子 shell sockperf
  2. 刻度已过时,新语法为$()

相关内容