簡體   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