![Szenario](https://rvso.com/image/1628797/Szenario.png)
Szenario
Bei der unbeaufsichtigten Installation von Software auf WSL Ubuntu 18.04 von Windows Powershell aus gibt der apt upgrade
Befehl die folgende Eingabeaufforderung zurück:
Diese Frageerklärt schön, dass man diese Eingabeaufforderung verhindern kann, indem man die Umgebungsvariable in WSL Ubuntu 18.04 einstellt, bevor man den apt upgrade
Befehl ausführt. Ich habe überprüft, dass dies tatsächlich funktioniert. Ich habe jedoch einige Probleme beim Einstellen dieser Umgebungsvariable für WSL Ubuntu 18.04 von Powershell aus. Diese Probleme werden im Abschnitt „Versuche“ näher erläutert.
Frage
Wie kann ich die Umgebungsvariable DEBIAN_FRONTEND=noninteractive
in WSL Ubuntu 18.04 über ein Powershell-Skript festlegen?
MWE
Ein MWE mit einigen Versuchen ist unten enthalten.
# 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."
Versuche
Zuerst habe ich versucht, die Umgebungsvariable durch Parsen bash -c DEBIAN_FRONTEND=noninteractive
von WSL festzulegen. Als Nächstes habe ich versucht wsl DEBIAN_FRONTEND=noninteractive
. Dann habe ich versucht, invoke-expression -Command
wie im MWE beschrieben. Alle diese hängen entweder an der Eingabeaufforderung (die ersten beiden zeigen die Eingabeaufforderung nicht an, sondern warten unendlich (ich habe jeweils über 2 Stunden gewartet und überprüft, dass der Befehl in WSL selbst nur +- 30 Minuten dauert)), letztere führt zur Eingabeaufforderung in Powershell:
.
Zweifel
Ich denke, die Beobachtungen aus den drei Versuchen deuten auf einen von zwei Fällen hin:
- Ich stelle die Umgebungsvariable
DEBIAN_FRONTEND=noninteractive
von Powershell aus nicht richtig ein. - Oder die Powershell setzt die Umgebungsvariable
DEBIAN_FRONTEND=noninteractive
in einer Shell korrekt, öffnet dann aber für den nächsten Befehl eine neue Shell, in der die Umgebungsvariable nicht gesetzt ist.
Um zu überprüfen, ob ich die Umgebungsvariable richtig eingestellt habe, habe ich versucht, auszuführen. wsl printenv
Dies gibt jedoch eine andere Liste zurück, als wenn ich printenv
von WLS aus ausführe. Wenn ich die Umgebungsvariable DEBIAN_FRONTEND=noninteractive
in WSL manuell einstelle, printenv
zeigt der Befehl die Umgebungsvariable korrekt an. Wenn ich jedoch WSL Ubuntu 18.04 schließe und erneut öffne und den Befehl erneut ausführe printenv
, ist die Umgebungsvariable verschwunden. Diese Beobachtung impliziert, dass Option 2 der Zweifel möglich ist. Ich habe noch keinen Weg gefunden, um festzustellen, ob die Umgebungsvariable von Powershell aus richtig eingestellt ist, da sie nicht in der Ausgabe von printenv
in Powershell enthalten ist, wenn sie in der WSL-Ausgabe von enthalten ist printenv
.
Antwort1
Nachdem ich Git nach Powershell-Skripten durchsucht hatte, die Folgendes enthielten, DEBIAN_FRONTEND=noninteractive
fand ichein Beispieldas zeigt, dass man mit dem folgenden Befehl eine Umgebungsvariable für einen bestimmten Befehl in einem Powershell-Skript angeben kann:
# 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
Ich habe überprüft, dass dies tatsächlich die Eingabeaufforderung für jegliche Benutzerinteraktion verhindert, was das XY-Problem löst. Obwohl ich dies noch nicht direkt überprüfen kann, indem ich die Umgebungsvariablen dieser Shell untersuche,annehmendadurch wird die Umgebungsvariable tatsächlich (vorübergehend) festgelegt DEBIAN_FRONTEND=noninteractive
.