![](/img/trans.png)
[英]bash aliases in xargs: “bash -c” does not pass arguments to command
[英]How to pass all bash arguments to bash -c within command substitution?
我正在嘗試有條件地將腳本 arguments 傳遞給bash -c
,它本身被傳遞給docker run
命令。 下面的示例說明了我正在嘗試做的事情。
#!/bin/bash
echo "Args: ${@}"
docker run ubuntu \
$( if [[ ! -z ${@} ]]; then echo "bash -c ${@}"; fi )
docker run ubuntu \
$( if [[ ! -z ${@} ]]; then echo "bash -c \"${@}\""; fi )
對於呼叫./myscript.sh ls -la
,這給了我以下 output。
Args: ls -la
bin
boot
dev
etc
home
lib
lib32
lib64
libx32
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
-la": -c: line 0: unexpected EOF while looking for matching `"'
-la": -c: line 1: syntax error: unexpected end of file
如您所見,第一個docker run
調用有效,但忽略了也已通過的-la
標志。 我曾想過嘗試將傳遞給bash -c
的命令(即ls -la
)括在轉義引號中,但這根本不起作用。
我怎樣才能實現所需的行為? 提前致謝!
你基本上是在做一個
bash -c ls -la
如果您在命令行上執行相同的命令,您可以重現這一點:它會給出相同的結果。
從 bash 手冊頁關於-c
選項:
... 命令從第一個非選項參數 command_string 中讀取。 如果在 command_string 之后有 arguments,則第一個參數分配給 $0,其余的 arguments 分配給位置參數。 對 $0 的賦值設置 shell 的名稱,用於警告和錯誤消息。
因此, -la
不會作為參數傳遞給ls
。 你必須做一個
bash -c "ls -la"
如果我正確理解您的代碼,如果參數列表為空,您不想在 docker 上運行 arguments。 然后我會嘗試
(( $# > 0 )) && docker run ubuntu bash -c "$*"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.