Como definir variável de ambiente para apenas um comando no shell de peixes?


49

Em bash, eu posso fazer EDITOR=vim crontab -e. Posso obter um efeito semelhante na casca de peixe?

Respostas:


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

2
existe alguma maneira mais fácil de fazer isso?
Milovan Zogovic

estranhamente, isso não funciona para mim. Estou chamando um script ruby, e o ENV não seleciona a variável que estou configurando:set -lx date '12/04/2012'
Duke

@Duke: Funciona para mim. begin; set -lx date '12/04/2012'; ruby -e 'puts ENV["date"]'; end
Dennis Williamson

10
Enquanto isso, isso foi respondido nas Perguntas frequentes sobre peixes: fishshell.com/docs/current/faq.html#faq-single-env
harm

2
E o que esse FAQ diz é o seguinte:env SOME_VAR=1 command
BallpointBen 5/18

72

Não perceba por que isso não deve funcionar: env EDITOR=vim crontab -e
isso ignora completamente o shell.


3
Isto é muito mais fácil. O único problema é que ignorar a concha não permite nenhum comando de peixe personalizado, que provavelmente está bloqueado na memória muscular.
precisa saber é o seguinte

Vi isso nos documentos também, mas por que o seguinte não funciona? env SOME_VAR=1 echo $SOME_VAR
Lmsurprenant 1/11

não importa, eu deveria ter pesquisado: stackoverflow.com/questions/10938483/…
lmsurprenant

10

Isso é da documentação

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

Use o comando env.

env SOME_VAR=1 command

Você também pode declarar uma variável local em um bloco e isso não ignoraria o shell

begin
  set -lx SOME_VAR 1
  command
end

2

dependendo de uma definição de befunção, isso pode falhar

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, veja a explicação da opção --no-scope-shadowing

-S ou --no-scope-shadowing permite que a função acesse as variáveis ​​das funções de chamada. Normalmente, quaisquer variáveis ​​dentro da função que tenham o mesmo nome que as variáveis ​​da função de chamada são "sombreadas" e seu conteúdo é independente da função de chamada.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.