![](/img/trans.png)
[英]Including $@ to pass on all command line arguments when a shell script invokes itself with bash -c
[英]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.