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?

Odpowiedzi:


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

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ę.


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

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.