Jak ustawić zmienną środowiskową dla jednego polecenia w skorupce ryby?

49

W bashu mogę to zrobić EDITOR=vim crontab -e. Czy mogę uzyskać podobny efekt w skorupce ryby?

Skalee
źródło

Odpowiedzi:

27
begin; set -lx EDITOR vim; crontab -e; end
Dennis Williamson
źródło
2
czy jest na to łatwiejszy sposób?
Milovan Zogovic
co dziwne, to nie działa dla mnie. Wywołuję skrypt ruby, a ENV nie odbiera zmiennej, którą ustawiam:set -lx date '12/04/2012'
Duke
@Duke: To działa dla mnie. begin; set -lx date '12/04/2012'; ruby -e 'puts ENV["date"]'; end
Dennis Williamson,
10
Tymczasem odpowiedź na to pytanie znajduje się w często zadawanych pytaniach dotyczących ryb: fishshell.com/docs/current/faq.html#faq-single-env
zaszkodzi
2
A to, co mówi FAQ, brzmi:env SOME_VAR=1 command
BallpointBen
72

Nie rozumiem, dlaczego to nie powinno działać: env EDITOR=vim crontab -e
całkowicie omija powłokę.

Wayne
źródło
3
To jest o wiele łatwiejsze. Jedynym problemem jest to, że ominięcie skorupy uniemożliwia wszelkie niestandardowe polecenia dotyczące ryb, które prawdopodobnie są zablokowane w pamięci mięśni.
JohnMetta
Widziałem to również w dokumentach, ale dlaczego nie działa następująca? env SOME_VAR=1 echo $SOME_VAR
lmsurprenant
nieważne, powinienem po prostu to sprawdzić: stackoverflow.com/questions/10938483/…
lmsurprenant
10

To z Dokumentacji

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

Użyj polecenia env.

env SOME_VAR=1 command

Możesz także zadeklarować zmienną lokalną w bloku, która nie pomija powłoki

begin
  set -lx SOME_VAR 1
  command
end
Azd325
źródło
2

w zależności od definicji befunkcji może się to nie powieść

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

Aby to działało:

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

Zobacz wyjaśnienie opcji --no-scope-shadowing

-S lub --no-scope-shadowing pozwala tej funkcji na dostęp do zmiennych wywoływanych funkcji. Zwykle wszelkie zmienne wewnątrz funkcji, które mają takie same nazwy jak zmienne z funkcji wywołującej, są „zasłaniane”, a ich zawartość jest niezależna od funkcji wywołującej.

Wadym Tyemirow
źródło