Frage Wie kann ich die Umgebungsvariable für nur einen Befehl in der Fischschale setzen?


In bash kann ich tun EDITOR=vim crontab -e. Kann ich einen ähnlichen Effekt in Fischschale bekommen?


43
2017-07-27 01:25


Ursprung




Antworten:


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

25
2017-07-27 01:58



Gibt es einen einfacheren Weg dies zu tun? - Milovan Zogovic
Seltsamerweise funktioniert das nicht für mich. Ich rufe ein Ruby-Skript an und ENV übernimmt die Variable, die ich einstelle, nicht: set -lx date '12/04/2012' - Duke
@Duke: Es funktioniert für mich. begin; set -lx date '12/04/2012'; ruby -e 'puts ENV["date"]'; end - Dennis Williamson
In der Zwischenzeit wurde dies in der Fisch-FAQ beantwortet: fishshell.com/docs/current/faq.html#faq-single-env - harm
Und was diese FAQ sagt, ist folgendes: env SOME_VAR=1 command - BallpointBen


Ich verstehe nicht, warum das nicht funktionieren sollte: env EDITOR=vim crontab -e
Das umgeht die Schale komplett.


65
2018-05-17 13:44



Das ist so viel einfacher. Das einzige Problem ist, dass das Umgehen der Shell keine benutzerdefinierten Fischbefehle erlaubt, die wahrscheinlich in Ihrem Muskelspeicher gespeichert sind. - JohnMetta
Das habe ich auch in der Dokumentation gesehen, aber warum funktioniert dann Folgendes nicht? env SOME_VAR=1 echo $SOME_VAR - lmsurprenant
vergiss es, ich hätte es nur nachsehen sollen: stackoverflow.com/questions/10938483/ ... - lmsurprenant


Das ist von der Dokumentation

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

Verwenden Sie den Befehl env.

env SOME_VAR=1 command

Sie können auch eine lokale Variable in einem Block deklarieren, die die Shell nicht umgehen würde

begin
  set -lx SOME_VAR 1
  command
end

10
2018-03-02 15:59





abhängig von einer Definition von be Funktion kann dies fehlschlagen

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

Damit es funktioniert:

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

Bitte, siehe die Erklärung von - Option "Kein Bereich - Schatten"

-S oder --no-scope-shadowing ermöglicht der Funktion den Zugriff auf Variablen von aufrufenden Funktionen. Normalerweise sind alle Variablen innerhalb der Funktion, die   haben denselben Namen wie Variablen aus der aufrufenden Funktion   "shadowed", und ihr Inhalt ist unabhängig von der aufrufenden Funktion.


2
2018-02-13 02:18