![Guión](https://rvso.com/image/1628797/Gui%C3%B3n.png)
Guión
Al implementar una instalación desatendida de algún software en WSL Ubuntu 18.04 desde Windows Powershell, el apt upgrade
comando devuelve el siguiente mensaje:
Esta preguntaexplica muy bien que se puede evitar este mensaje configurando la variable de entorno en WSL Ubuntu 18.04 antes de ejecutar el apt upgrade
comando. Verifiqué que esto realmente funciona. Sin embargo, tengo algunos problemas al configurar esa variable de entorno para WSL Ubuntu 18.04 desde Powershell. Estas cuestiones se detallan en la sección "Intentos".
Pregunta
¿Cómo puedo configurar la variable de entorno DEBIAN_FRONTEND=noninteractive
en WSL Ubuntu 18.04 desde un script de PowerShell?
MWE
A continuación se incluye un MWE con algunos intentos.
# 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."
Intentos
Inicialmente intenté configurar la variable de entorno analizando bash -c DEBIAN_FRONTEND=noninteractive
desde WSL. Luego lo intenté wsl DEBIAN_FRONTEND=noninteractive
. Luego probé lo invoke-expression -Command
descrito en el MWE. Todos estos se cuelgan en el mensaje (los primeros 2 no muestran el mensaje pero siguen esperando indefinidamente (esperé más de 2 horas cada uno y verifiqué que el comando en wsl solo toma +- 30 minutos)), el último va al mensaje en powershell:
.
Dudas
Creo que las observaciones de los 3 intentos implican cualquiera de los 2 casos:
- No estoy configurando
DEBIAN_FRONTEND=noninteractive
correctamente la variable de entorno desde PowerShell. - O bien, PowerShell establece la variable de entorno
DEBIAN_FRONTEND=noninteractive
correctamente en algún shell, pero luego abre un nuevo shell para el siguiente comando, en el que la variable de entorno no está configurada.
Para verificar que configuré la variable de entorno correctamente, intenté ejecutar wsl printenv
, sin embargo, esto devuelve una lista diferente a la que ejecuto printenv
desde wls. Si configuro manualmente la variable de entorno DEBIAN_FRONTEND=noninteractive
en wsl, el printenv
comando muestra correctamente la variable de entorno. Sin embargo, si cierro y vuelvo a abrir WSL Ubuntu 18.04 y vuelvo a ejecutar el printenv
comando, la variable de entorno ha desaparecido. Esta observación implica que la opción 2 de las dudas es posible. Todavía no he encontrado una manera de determinar si la variable de entorno está configurada correctamente desde PowerShell, ya que no está entre la salida de printenv
PowerShell, cuando está en la salida WSL de printenv
.
Respuesta1
Después de buscar en git scripts de powershell que conteníanDEBIAN_FRONTEND=noninteractive
encontréun ejemploeso muestra que uno puede especificar una variable de entorno para un comando específico, desde un script de PowerShell, con el siguiente comando:
# 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
Verifiqué que esto efectivamente evita que se solicite cualquier interacción del usuario, lo que resuelve el problema XY. Aunque todavía no puedo verificar esto directamente inspeccionando las variables de entorno de ese Shell,asumirDe hecho, esto establece (temporalmente) la variable de entorno DEBIAN_FRONTEND=noninteractive
.