¿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?

Respuestas:


27
begin; set -lx EDITOR vim; crontab -e; end

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.


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

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.