我必须在docker容器内执行脚本,例如
composer install
或者
bin/another-script another-script-arg-1 another-script-arg-2
为了在容器内执行此命令,我必须执行类似的操作(使用 docker-compose)
sudo docker-compose exec container-name sh -c 'bin/another-script another-script-arg-1 another-script-arg-2'
我想写一个简单的脚本,让我可以省去一些拼写错误和额外的笔画,只需运行上一个命令的变体即可,所以我写了一个脚本
#!/usr/bin/env bash
sudo docker-composer exec container-name sh -c "'bin/another-script $@'"
所以我可以在外面执行,只是
bin/another-script another-script-arg-1 another-script-arg-2
但不起作用,只是告诉我类似“bin/another-script”未找到(在容器内)之类的信息。我知道当单引号没有传递到 -c '' 部分时会发生这种情况。我尝试了不同的方法
#!/usr/bin/env bash
sudo docker-composer exec container-name sh -c \'bin/another-script $@\'
或者
#!/usr/bin/env bash
sudo docker-composer exec container-name sh -c "'bin/another-script $@'"
或者
#!/usr/bin/env bash
sudo docker-composer exec container-name sh -c "'"bin/another-script "$@""'"
编辑:脚本的内部路径bin/another-script
不是问题,因为容器移动到工作目录,任何情况下我都用绝对路径测试得到相同的结果/app/bin/another-script
#!/usr/bin/env bash
sudo docker-composer exec container-name sh -c "'/app/bin/another-script $@'"
但没有任何效果,有什么建议吗?
答案1
经过多次尝试和错误,我找到了一种可行的方法,但我不知道这是否是最好的或正确的方法
#!/usr/bin/env bash
container_cmd="bin/another-script $@"
sudo docker-composer exec container-name sh -c "$container_cmd"
我想知道为什么单引号不是必要的