Bash命令作为Bash命令参数

时间:2016-12-13 10:33:35

标签: bash ubuntu

我有一个守护进程的Docker容器。我可以像这样在容器中作为当前用户一次执行多个bash命令:

docker exec -it <container_ID> /bin/bash -c "pwd; cd src; pwd"

我现在需要通过bash脚本执行此操作。脚本很简单:

#!/usr/bin/env bash
# Here I do stuff to acquire the container_ID
docker exec -it <container_ID> -user $(id -u):$(id -g) $@

然后我将参数传递给脚本,如下所示:

./run_in_container.sh /bin/bash -c "pwd; cd src; pwd"

哪个不能按预期工作,因为引号被剥离,而docker exec得到的是/bin/bash -c pwd; cd src; pwd。所以我尝试以下方法:

./run_in_container.sh /bin/bash -c '"pwd; cd src; pwd"'

我收到此错误消息:

cd: -c: line 0: unexpected EOF while looking for matching `"'
cd: -c: line 1: syntax error: unexpected end of file

这样做的正确方法是什么?

我怀疑这是非常重要的信息,但我使用的是Gnu bash 4.3.11。

1 个答案:

答案 0 :(得分:2)

$@周围使用引号:

docker exec -it <container_ID> -user $(id -u):$(id -g) "$@"