Guión

Guión

Guión

Al implementar una instalación desatendida de algún software en WSL Ubuntu 18.04 desde Windows Powershell, el apt upgradecomando devuelve el siguiente mensaje:

ingrese la descripción de la imagen aquí

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 upgradecomando. 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=noninteractiveen 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=noninteractivedesde WSL. Luego lo intenté wsl DEBIAN_FRONTEND=noninteractive. Luego probé lo invoke-expression -Commanddescrito 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: ingrese la descripción de la imagen aquí.

Dudas

Creo que las observaciones de los 3 intentos implican cualquiera de los 2 casos:

  1. No estoy configurando DEBIAN_FRONTEND=noninteractivecorrectamente la variable de entorno desde PowerShell.
  2. O bien, PowerShell establece la variable de entorno DEBIAN_FRONTEND=noninteractivecorrectamente 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 printenvdesde wls. Si configuro manualmente la variable de entorno DEBIAN_FRONTEND=noninteractiveen wsl, el printenvcomando muestra correctamente la variable de entorno. Sin embargo, si cierro y vuelvo a abrir WSL Ubuntu 18.04 y vuelvo a ejecutar el printenvcomando, 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 printenvPowerShell, 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.

información relacionada