繁体   English   中英

使用bash -c将所有args传递给在新shell中调用的命令

[英]Pass all args to a command called in a new shell using bash -c

我已将示例简化为以下内容:

file1.sh:

#!/bin/bash
bash -c "./file2.sh $@"

file2.sh:

#!/bin/bash
echo "first $1"
echo "second $2"

我希望如果我调用./file1.sh ab来获得:

first a
second b

但是我得到了:

first a
second

换句话说,第一个参数之后的我后面的参数不会传递给我在新的bash shell中执行的命令。 我已经尝试了删除和移动file1.sh文件中的引号的许多变体,但是还没有奏效。

为什么会发生这种情况,如何获得所需的行为?

(更新-我意识到在这个例子中我叫bash -c似乎毫无意义,我的实际file1.sh是命令的代理脚本,该命令在本地被调用以在docker exec -i mycontainer bash -c ''容器中运行,因此实际上是docker exec -i mycontainer bash -c ''

用不同的引用将file1.sh更改file1.sh

#!/bin/bash
bash -c './file2.sh "$@"' - "$@"

- "$@"传递连字符以填充$0$@则传递以填充bash -c命令行中的所有其他位置参数。

您也可以做到:

bash -c './file2.sh "$@"' "$0" "$@"

但是,这里并不需要真正使用bash -c ,您可以使用:

./file2.sh "$@"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM