gpt4 book ai didi

bash - 将命令组直接写入 `docker exec`

转载 作者:行者123 更新时间:2023-12-02 18:13:09 39 4
gpt4 key购买 nike

我有以下命令可以正常工作并在返回前打印 foo:

docker exec -i <id> /bin/sh < echo "echo 'foo'"

我想用一个管道将多个命令定向到容器中,例如 echo 'foo'ls/。我尝试了以下方法:

  1. 这会失败,因为它在主机上运行命令并将输出通过管道传输到容器中:
    {
    echo "foo"
    ls /
    } | docker exec -i <id> /bin/sh
  2. 这失败了,因为它有错误的语法。它还在主机上运行:

    {
    echo "foo"
    ls /
    } | docker exec -i <id> /bin/sh
  3. 这个失败了,但无论如何我都不想使用字符串数组:

    for COMMAND in 'echo "foo"' 'ls /'
    do
    docker exec -i <id> /bin/sh < echo $COMMAND
    done

我还尝试了其他几种方法,例如将命令通过管道传输到 teeecho 中,但没有成功。如果你想知道我为什么要做这件看似荒谬的事情,那是因为:

  • 这是一个简短的脚本,我想将其全部放在一个地方
  • 我想使用语法高亮,所以我不想将它全部存储在一个字符串列表中
  • 容器有脚本应该运行的程序而宿主没有
  • 这是一个自动过程,我想用主机上的 crontab 触发

最佳答案

您可以按以下方式运行一组命令

 docker exec -i <id> /bin/sh -c 'echo "foo"; ls -l'

docker exec -i 996eee5d121d /bin/sh -c 'echo 'foo'; ls -l'

docker exec -i 996eee5d121d /bin/sh -c 'echo foo; ls -l'

如果你想运行超过 2 个命令,只需在每个命令后附加 ;

docker exec -i 996eee5d121d /bin/sh -c 'echo "foo"; ls -l; ls -a'

关于bash - 将命令组直接写入 `docker exec`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62184189/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com