設想

設想

設想

從 Windows Powershell 在 WSL Ubuntu 18.04 上實作某些軟體的無人值守安裝時,此apt upgrade指令會傳回下列提示:

在此輸入影像描述

這個問題很好地解釋了,可以透過在運行命令之前在 WSL Ubuntu 18.04 中設定環境變數來防止此提示出現apt upgrade。我驗證這確實有效。但是,我在從 Powershell 為 WSL Ubuntu 18.04 設定環境變數時遇到一些問題。這些問題在「嘗試」部分進行了詳細闡述。

問題

如何DEBIAN_FRONTEND=noninteractive透過 powershell 腳本在 WSL Ubuntu 18.04 中設定環境變數?

微量元素

下麵包含了經過一些嘗試的 MWE。

# First define path to the installed ubuntu1804.exe
$str1="/Users/"
$str2="/AppData/Local/Microsoft/WindowsApps/ubuntu1804"
$hdd_name=(Get-WmiObject Win32_OperatingSystem).SystemDrive
$username=$env:UserName
[String] $ubuntu1804_path=$hdd_name+$str1+$username+$str2


Write-Host "Done with setup now starting apt update ."

# perfrom apt update
$str1=" run 'yes | apt update'"
$command=$ubuntu1804_path+$str1
invoke-expression -Command $command

Write-Host "Performed Update, now setting env variable."

# set environment variable DEBIAN_FRONTEND=noninteractive
$str1=" run DEBIAN_FRONTEND=noninteractive"
$command=$ubuntu1804_path+$str1
invoke-expression -Command $command 

Write-Host "Performed setting env variable, now performing upgrade."

# perfrom apt upgrade
$str1=" run 'yes | apt upgrade'"
$command=$ubuntu1804_path+$str1
invoke-expression -Command $command

Write-Host "Performed upgrade."

嘗試

最初我嘗試透過從 WSL 解析來設定環境變數bash -c DEBIAN_FRONTEND=noninteractive。接下來我嘗試了wsl DEBIAN_FRONTEND=noninteractive。然後我invoke-expression -Command按照 MWE 中的描述進行了嘗試。所有這些要么掛在提示符上(前兩個不顯示提示符,但無限期地等待,(我每個等待2 小時以上,並驗證wsl 中的命令本身只需要+- 30 分鐘)),後者轉到powershell 中提示: 在此輸入影像描述

疑慮

我認為這 3 次嘗試的觀察結果意味著以下兩種情況之一:

  1. 我沒有DEBIAN_FRONTEND=noninteractive從 powershell 正確設定環境變數。
  2. 或者,powershellDEBIAN_FRONTEND=noninteractive在某個 shell 中正確設定了環境變量,但隨後為下一個命令開啟了一個新 shell,其中未設定環境變數。

為了驗證我設定的環境變數是否正確,我嘗試運行wsl printenv,但是這會傳回一個與我從 wls 運行時不同的清單printenv。如果我DEBIAN_FRONTEND=noninteractive在 wsl 中手動設定環境變量,則該printenv命令會正確顯示環境變數。但是,如果我關閉並重新開啟 WSL Ubuntu 18.04 並重新執行命令printenv,環境變數就會消失。這項觀察結果意味著疑慮中的選項 2 是可能的。我還沒有找到一種方法來確定環境變數是否從 powershell 設定正確,因為printenv當它位於 的 WSL 輸出中時,它不在 powershell 的輸出中printenv

答案1

在 git 搜尋包含DEBIAN_FRONTEND=noninteractive我發現的 powershell 腳本後一個例子這表示可以使用以下命令從 powershell 腳本為特定命令指定環境變數:

# First define path to the installed ubuntu1804.exe
$str1="/Users/"
$str2="/AppData/Local/Microsoft/WindowsApps/ubuntu1804"
$hdd_name=(Get-WmiObject Win32_OperatingSystem).SystemDrive
$username=$env:UserName
[String] $ubuntu1804_path=$hdd_name+$str1+$username+$str2

# Run a command with an environment variable
$str1=" run DEBIAN_FRONTEND=noninteractive apt-get upgrade -y"
$command=$ubuntu1804_path+$str1
invoke-expression -Command $command

我驗證這確實阻止了任何用戶互動的提示,從而解決了 XY 問題。儘管我還無法透過檢查該 shell 的環境變數來直接驗證這一點,但我認為這確實(暫時)設定了環境變數DEBIAN_FRONTEND=noninteractive

相關內容