【发布时间】:2022-07-21 18:54:48
【问题描述】:
我们有 docker contianers,我想通过脚本在我的容器中运行 bash 命令。像这样:
bin/run-in-container ls -la
在容器中运行的脚本如下所示:
#!/usr/bin/env bash
docker compose exec container_name bash -ic "$@"
我无法让我的脚本解释单引号内的所有参数。
| this interprets to | docker compose exec api bash -ic ls -la |
|---|---|
| but what I want to to interpret is | docker compose exec api bash -ic 'ls -la' |
如果我尝试连接一串单引号和我的参数,它会使字符转义:
#!/usr/bin/env bash
escaped_single_qoute="'"
docker compose exec container_name bash -ic $escaped_single_qoute "$@" $escaped_single_qoute
但这解释为:
docker compose exec api bash -ic ''\''ls' '-la'\'''
【问题讨论】:
-
为什么不只是
docker compose exec container_name "$@"?But this interprets into :是的,你类型的引号连接起来时它们是不同的,有不同的解析规则。 -
这在容器内的行为不正确。这只运行
ls而不是ls -la或类似ls src/test -
我无法复制您的评论。使用
version: "3" services: alpine: image: alpine command: sleep 1h,后跟docker compose up和docker compose exec alpnie ls -la正确列出/目录。发布 MCVE,否则没有发生。
标签: linux bash docker shell docker-compose