Zsh alternativa al truco rápido de asignación y herencia de bash

1

Hay un truco disponible en bash que le permite establecer la variable de entorno para el proceso hijo y ejecutarlo en una sola línea, conservando los valores originales de la variable en el shell. Por ejemplo, para configurar las variables de entorno "LANG" y "FOO" y luego ejecutar "gedit", usaríamos el siguiente comando (desde Documentos de Ubuntu ):

LANG=he_IL.UTF-8 FOO=bar gedit

No funciona en zsh.

¿Existe una alternativa igualmente simple?

Michael Pankov
fuente

Respuestas:

2

Lo que describe funciona igual en Zsh que en Bash. Desde el manual :

Un comando simple es una secuencia de asignaciones de parámetros opcionales seguidas de palabras separadas por espacios en blanco, con redirecciones opcionales intercaladas. La primera palabra es el comando a ejecutar, y las palabras restantes, si las hay, son argumentos para el comando.

Si se da un nombre de comando, las asignaciones de parámetros modifican el entorno del comando cuando se ejecuta. (…)

... y en Bash :

Cuando se ejecuta un comando simple, el shell realiza las siguientes expansiones, asignaciones y redirecciones, de izquierda a derecha.

  1. Las palabras que el analizador ha marcado como asignaciones de variables (las que preceden al nombre del comando) y las redirecciones se guardan para su procesamiento posterior.

...

Si no aparece ningún nombre de comando, las asignaciones de variables afectan el entorno de shell actual. De lo contrario, las variables se agregan al entorno del comando ejecutado y no afectan al entorno de shell actual

slhck
fuente
Lo estaba probando con TEST=5 echo $TEST, pero ahora he descubierto que no funciona ni en zsh ni en bash (no produce nada). En zsh, echo está integrado y puede explicar por qué no funciona; Sin embargo, ¿qué pasa en caso de bash?
Michael Pankov
1
Veo. Lee el manual de Bash otra vez: "las palabras que el analizador ha marcado como asignaciones de variables (las que preceden al nombre del comando) [...] se guardan para su procesamiento posterior - tu echo comando no verá el cambio de $TEST. correr TEST=5 sh -c 'echo $TEST' ¡y mira lo que pasa!
slhck