Bash

導出變數,使其出現在通過 sudo 獲取的腳本中

  • April 18, 2016

我有一個 bash 腳本/s,它有一個以sudo.

變數在此腳本中聲明。

然後它獲取另一個commands.sh腳本,但是該腳本sudo在獲取腳本時用於返回給普通使用者 commands.sh

文件:main.sh

#!/bin/bash

user=ubuntu
export $user

sudo -u $user bash -c "source includes-shared/commands.sh"

文件:includes-shared/commands.sh

# debug command to see if $user is available
printenv
[ more commands...]

該變數$user不再出現在該腳本中,即它對其他命令commands.sh不可見。 如何導出以便源腳本可以使用它?printenv
$user

您需要針對變數的名稱執行導出。現在,該變數在 export 看到它之前被引用和替換。

將其更改為:

export user

注意缺少$

您目前的版本基本上是這樣的:

export ubuntu

因為$user首先被解釋。

使用 sudo 時,您還失去了環境變數。有兩種方法可以保存它們。要麼保持你的整個環境

sudo -E -u $user command

或者只保留您需要的變數

sudo user=$user -u $user command

引用自:https://unix.stackexchange.com/questions/277185