Scenario
En mettant en œuvre une installation sans surveillance de certains logiciels sur WSL Ubuntu 18.04 depuis Windows Powershell, la commande apt upgrade
retourne l'invite suivante :
Cette question explique bien que l'on peut éviter cette invite en définissant la variable d'environnement dans WSL Ubuntu 18.04 avant d'exécuter la commande apt upgrade
. J'ai vérifié que cela fonctionne en effet. Cependant, je rencontre des problèmes pour définir cette variable d'environnement pour WSL Ubuntu 18.04 à partir de Powershell. Ces problèmes sont détaillés dans la section "Tentatives".
Question
Comment puis-je définir la variable d'environnement DEBIAN_FRONTEND=noninteractive
dans WSL Ubuntu 18.04 à partir d'un script Powershell ?
MWE
Un exemple avec quelques tentatives est inclus ci-dessous.
# Définition du chemin vers le fichier ubuntu1804.exe installé
$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 "Terminé avec la configuration, maintenant démarrage de l'apt update."
# Effectuer l'apt update
$str1=" exécuter 'yes | apt update'"
$command=$ubuntu1804_path+$str1
invoke-expression -Command $command
Write-Host "Mise à jour effectuée, maintenant définition de la variable d'environnement."
# définir la variable d'environnement DEBIAN_FRONTEND=noninteractive
$str1=" exécuter DEBIAN_FRONTEND=noninteractive"
$command=$ubuntu1804_path+$str1
invoke-expression -Command $command
Write-Host "Variable d'environnement définie, maintenant mise à niveau."
# Effectuer la mise à niveau de l'apt
$str1=" exécuter 'yes | apt upgrade'"
$command=$ubuntu1804_path+$str1
invoke-expression -Command $command
Write-Host "Mise à niveau effectuée."
Tentatives
Au début, j'ai essayé de définir la variable d'environnement en analysant bash -c DEBIAN_FRONTEND=noninteractive
depuis WSL. Ensuite, j'ai essayé wsl DEBIAN_FRONTEND=noninteractive
. Puis j'ai utilisé invoke-expression -Command
comme décrit dans l'exemple ci-dessus. Tous ces essais soit bloquent sur l'invite (les 2 premiers n'affichent pas l'invite mais attendent indéfiniment, (j'ai attendu plus de 2h pour chacun et vérifié que la commande dans wsl elle-même prend seulement environ 30 mins)), le dernier ouvre l'invite dans Powershell: .
Doutes
Je pense que les observations des 3 tentatives impliquent l'un des 2 cas suivants :
- Je ne définis pas correctement la variable d'environnement
DEBIAN_FRONTEND=noninteractive
depuis Powershell. - Ou bien, Powershell définit correctement la variable d'environnement
DEBIAN_FRONTEND=noninteractive
dans un shell, mais ouvre ensuite un nouveau shell pour la commande suivante, dans lequel la variable d'environnement n'est pas définie.
Pour vérifier si j'ai correctement défini la variable d'environnement, j'ai essayé de lancer wsl printenv
, cependant cela renvoie une liste différente de celle obtenue en exécutant printenv
depuis wsl. Si je définis manuellement la variable d'environnement DEBIAN_FRONTEND=noninteractive
dans wsl, la commande printenv
affiche correctement la variable d'environnement. Cependant, si je ferme et réouvre WSL Ubuntu 18.04 et que je relance la commande printenv
, la variable d'environnement a disparu. Cette observation implique que l'option 2 des doutes est possible. Je n'ai pas encore trouvé de moyen de déterminer si la variable d'environnement est correctement définie depuis Powershell, car elle ne figure pas parmi les sorties de printenv
dans Powershell, alors qu'elle apparaît dans la sortie de printenv
dans WSL.