2015-01-11 61 views
1

下面是一個例子bash腳本,我想用sudo -i運行:傳遞空參數傳遞給須藤,我

#!/bin/bash 

echo "arg 1: $1" 
echo "arg 2: $2" 

當我正常運行此命令與一個空的參數,它運行正常:

$ /tmp/args.sh "" two 
arg 1: 
arg 2: two 

帶滑動sudo的,我得到預期的結果:

$ sudo /tmp/args.sh "" two 
arg 1: 
arg 2: two 

但是如果我使用-i(拿起用戶的shell和登錄腳本),突然的第一個參數消失:

$ sudo -i /tmp/args.sh "" two 
arg 1: two 
arg 2: 

我想不出任何辦法來引用或逃避第一,空的參數。

注意:我已經寫/tmp/args.sh "" two到一個文件,然後執行與sudo -i想出了一個解決辦法,但我不知道是否有任何方式,直接在命令行實現這一目標。

+2

這似乎是在'sudo'的錯誤,你應該報告它。 – Barmar

+0

提交的錯誤報告:http://bugzilla.sudo.ws/show_bug.cgi?id=679 – morloch

回答

2

這個工作對我來說:

sudo -i bash -c '/tmp/args.sh "" two' 
0

引用您的空雙引號參數單引號,像這樣:

$ sudo -i /tmp/args.sh '""' two 
+1

這是行不通的。它將字面引號作爲第一個參數,而不是空字符串。 – Barmar

+0

適合我。外部引號確保''「'參數被傳遞給由'-i'選項執行的用戶shell,然後該shell將''''解釋爲空參數。 –

+0

這是我的一個嘗試。它打印了'arg1:'「''而不是'arg1:' – Barmar