Come posso impostare la variabile d'ambiente per un solo comando in fish shell?


49

In bash, posso fare EDITOR=vim crontab -e. Posso ottenere un effetto simile in Fish shell?

Risposte:


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

2
c'è un modo più semplice per farlo?
Milovan Zogovic,

stranamente, questo non funziona per me. Sto chiamando uno script ruby ​​e ENV non rileva la variabile che sto impostando:set -lx date '12/04/2012'
Duke

@Duke: funziona per me. begin; set -lx date '12/04/2012'; ruby -e 'puts ENV["date"]'; end
Dennis Williamson,

10
Nel frattempo è stata data una risposta nelle FAQ sui pesci: fishshell.com/docs/current/faq.html#faq-single-env
danno

2
E quello che dice questa FAQ è questo:env SOME_VAR=1 command
BallpointBen,

72

Non vedo perché questo non dovrebbe funzionare: env EDITOR=vim crontab -e
questo ignora completamente la shell.


3
Questo è molto più semplice. L'unico problema è che bypassare il guscio impedisce qualsiasi comando di pesce personalizzato, che è probabilmente bloccato nella memoria muscolare.
JohnMetta,

L'ho visto anche nei documenti, ma allora perché il seguente non funziona? env SOME_VAR=1 echo $SOME_VAR
lmsurprenant,

poco male, avrei dovuto appena guardato in su: stackoverflow.com/questions/10938483/...
lmsurprenant

10

Questo è dalla documentazione

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

Usa il comando env.

env SOME_VAR=1 command

Puoi anche dichiarare una variabile locale in un blocco e questo non aggirerebbe la shell

begin
  set -lx SOME_VAR 1
  command
end

2

a seconda di una definizione di befunzione, ciò può fallire

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

Affinché funzioni:

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

Per favore, vedi la spiegazione dell'opzione --no-scope-shadowing

-S o --no-scope-shadowing consente alla funzione di accedere alle variabili delle funzioni di chiamata. Normalmente, tutte le variabili all'interno della funzione che hanno lo stesso nome delle variabili della funzione chiamante sono "ombreggiate" e il loro contenuto è indipendente dalla funzione chiamante.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.