簡體   English   中英

在sudo語句中設置環境變量-Linux Shell

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM