Comment définir une variable d'environnement pour une seule commande dans une coquille de poisson?


49

En bash, je peux faire EDITOR=vim crontab -e. Puis-je obtenir un effet similaire dans la coquille de poisson?

Réponses:


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

2
y a-t-il un moyen plus facile de faire cela?
Milovan Zogovic

curieusement, cela ne fonctionne pas pour moi. J'appelle un script ruby, et ENV ne prend pas la variable que je mets:set -lx date '12/04/2012'
Duke

@Duke: Cela fonctionne pour moi. begin; set -lx date '12/04/2012'; ruby -e 'puts ENV["date"]'; end
Dennis Williamson

10
Dans l'intervalle, cela a été répondu dans la FAQ sur les poissons: fishshell.com/docs/current/faq.html#faq-single-env
harm

2
Et voici ce que dit la FAQ:env SOME_VAR=1 command
BallpointBen

72

Je ne vois pas pourquoi cela ne fonctionnerait pas: env EDITOR=vim crontab -e
cela contourne complètement le shell.


3
C'est tellement plus facile. Le seul problème est que le contournement de la coque interdit toute commande de poisson personnalisée, qui est probablement verrouillée dans votre mémoire musculaire.
JohnMetta

J'ai vu cela aussi dans la documentation, mais pourquoi alors ce qui suit ne fonctionne-t-il pas? env SOME_VAR=1 echo $SOME_VAR
lmsurprenant

ça ne fait rien, j'aurais dû le regarder: stackoverflow.com/questions/10938483/…
lmsurprenant

10

C'est de la documentation

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

Utilisez la commande env.

env SOME_VAR=1 command

Vous pouvez également déclarer une variable locale dans un bloc et ne pas contourner le shell

begin
  set -lx SOME_VAR 1
  command
end

2

en fonction d'une définition de befonction, cela peut échouer

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

Pour que cela fonctionne:

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

S'il vous plaît, voir l'explication de l' option --no-scope-shadowing

-S ou --no-scope-shadowing permet à la fonction d'accéder aux variables des fonctions d'appel. Normalement, toutes les variables de la fonction qui portent le même nom que les variables de la fonction appelante sont "masquées" et leur contenu est indépendant de la fonction appelante.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.