设想

设想

设想

在从 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 -CommandMWE 中所述的。所有这些要么挂在提示符上(前 2 个不显示提示符,而是无限期地等待,(我每个都等了 2 小时以上,并验证了 wsl 中的命令本身只需要 +- 30 分钟)),后者转到 powershell 中的提示符: 在此处输入图片描述

疑虑

我认为这 3 次尝试的观察结果暗示了以下两种情况:

  1. 我没有DEBIAN_FRONTEND=noninteractive从 powershell 正确设置环境变量。
  2. 或者,powershellDEBIAN_FRONTEND=noninteractive在某些 shell 中正确设置了环境变量,但随后为下一个命令打开了一个新的 shell,其中未设置环境变量。

为了验证我是否正确设置了环境变量,我尝试运行wsl printenv,但是这返回的列表与我printenv从 wls 运行的列表不同。如果我DEBIAN_FRONTEND=noninteractive在 wsl 中手动设置环境变量,该printenv命令会正确显示环境变量。但是,如果我关闭并重新打开 WSL Ubuntu 18.04 并重新运行该printenv命令,环境变量就会消失。这个观察意味着疑惑的选项 2 是可能的。我还没有找到一种方法来确定环境变量是否从 powershell 中正确设置,因为它不在printenvpowershell 的输出中,而它在 WSL 的输出中printenv

答案1

在 git 中搜索包含以下内容的 powershell 脚本后,DEBIAN_FRONTEND=noninteractive我发现一个例子这表明可以使用以下命令从 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

相关内容