[英]Set env variable inside sudo statement - Linux shell
我需要在sudo語句中修改環境變量。 sudo語句包含一些說明。
在示例中,我將環境變量VAR1設置為值“ ABC”。
然后,在sudo語句中(僅在此處),我需要將該值更改為“ DEF”。 但是,將值設置為“ DEF”后,該值沒有更改。 回聲命令返回“ ABC”作為VAR1的值。
如何在sudo語句中更改/設置變量的值?
這是我運行的代碼示例:
#!/bin/bash
export VAR1="ABC"
sudo -u <user> -i sh -c "
export VAR1="DEF";
echo $VAR1;
"
echo $VAR1;
額外信息:我嘗試了sudo的-E選項,以在sudo調用時保留環境變量(來源: https : //unix.stackexchange.com/questions/337819/how-to-export-variable-for- use-with-sudo / 337820 ),但結果沒有改變:
#env VAR1="DEF" sudo -u <user> -E -i sh -c " [...]"
使用單引號防止外殼插入$VAR1
。 您需要將$VAR1
傳遞給內殼,以便它可以擴展它。
sudo -u <user> -i sh -c '
export VAR1="DEF"
echo "$VAR1"
'
引用變量擴展名也是一個好主意,以防止出現故障和分裂事故 :寫"$VAR1"
而不是$VAR1
。
(因為您有換行符,所以不需要分號。)
嘗試這個
export VAR1="ABC"
sudo -u <user> -i sh -c '
export VAR1="DEF"
echo "${VAR1}"
'
echo $VAR1;
正如John Kugelman指出的那樣,應使用'而不是'來包裝命令,以避免shell vars插值。此外,在命令中引用VAR
時,請使用"${}"
代替$
,這就是解決問題的方法我
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.