正确传递 script.sh $@ 括在单引号中

正确传递 script.sh $@ 括在单引号中

我必须在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"

我想知道为什么单引号不是必要的

相关内容