¿Cómo puedo configurar la variable de entorno para un solo comando en fish shell?

49

En bash, puedo hacer EDITOR=vim crontab -e. ¿Puedo obtener un efecto similar en Fish shell?

skalee
fuente

Respuestas:

27
begin; set -lx EDITOR vim; crontab -e; end
Dennis Williamson
fuente
2
¿Hay alguna manera más fácil de hacer esto?
Milovan Zogovic
Curiosamente, esto no funciona para mí. Estoy llamando a un script de ruby, y ENV no capta la variable que estoy configurando:set -lx date '12/04/2012'
Duke
@Duke: A mí me funciona. begin; set -lx date '12/04/2012'; ruby -e 'puts ENV["date"]'; end
Dennis Williamson
10
Mientras tanto, esto se ha respondido en las Preguntas frecuentes de Fish: fishshell.com/docs/current/faq.html#faq-single-env
daños
2
Y lo que dice esa pregunta frecuente es esto:env SOME_VAR=1 command
BallpointBen
72

No veo por qué esto no debería funcionar: env EDITOR=vim crontab -e
eso evita el shell por completo.

Wayne
fuente
3
Esto es mucho más fácil. El único problema es que omitir el caparazón no permite ningún comando de pez personalizado, que probablemente esté bloqueado en su memoria muscular.
JohnMetta
También lo vi en los documentos, pero ¿por qué no funciona lo siguiente? env SOME_VAR=1 echo $SOME_VAR
lmsurprenant
no importa, debería haberlo buscado: stackoverflow.com/questions/10938483/…
lmsurprenant
10

Eso es de la documentación

SOME_VAR=1 command produces an error: Unknown command "SOME_VAR=1".

Usa el comando env.

env SOME_VAR=1 command

También puede declarar una variable local en un bloque y eso no pasaría por alto el shell

begin
  set -lx SOME_VAR 1
  command
end
Azd325
fuente
2

dependiendo de una definición de befunción, esto puede fallar

begin
  set -lx RAILS_ENV staging
  be rails r "p ENV['RAILS_ENV']"
end

Para que funcione:

function be --description 'Runs bundle exec' --no-scope-shadowing
  bundle exec $argv
end

Por favor, vea la explicación de la opción --no-scope-shadowing

-S o --no-scope-shadowing permite que la función acceda a las variables de las funciones de llamada. Normalmente, cualquier variable dentro de la función que tenga el mismo nombre que las variables de la función de llamada se "sombrea" y su contenido es independiente de la función de llamada.

Vadym Tyemirov
fuente