69 votes

Comment puis-je définir une variable d'environnement pour une seule commande dans fish Shell ?

En bash, je peux faire EDITOR=vim crontab -e . Puis-je obtenir un effet similaire dans Fish Shell ?

94voto

mcpearcy00 Points 1

Je ne vois pas pourquoi ça ne marcherait pas : env EDITOR=vim crontab -e
Cela contourne complètement le Shell.

5 votes

C'est tellement plus facile. Le seul problème est que le contournement du Shell interdit toute commande de poisson personnalisée, qui est probablement ancrée dans votre mémoire musculaire.

1 votes

J'ai également vu cela dans la documentation, mais alors pourquoi la méthode suivante ne fonctionne-t-elle pas ? env SOME_VAR=1 echo $SOME_VAR

1 votes

Je n'ai pas fait attention, j'aurais dû faire des recherches : stackoverflow.com/questions/10938483/

38voto

jason saldo Points 5036
begin; set -lx EDITOR vim; crontab -e; end

5 votes

Existe-t-il un moyen plus simple de procéder ?

0 votes

Curieusement, cela ne fonctionne pas pour moi. J'appelle un script ruby script, et ENV ne détecte pas la variable que je définis : set -lx date '12/04/2012'

0 votes

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

16voto

Azd325 Points 221

Cela vient 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 cela ne contournerait pas le Shell.

begin
  set -lx SOME_VAR 1
  command
end

8voto

Kevin Languasco Points 101

Démarrage version 3.1 vous pouvez utiliser la même syntaxe que celle utilisée dans bash ( EDITOR=vim crontab -e ).

PR présentant la fonction : https://github.com/fish-Shell/fish-Shell/pull/6287

2voto

Vadym Tyemirov Points 121

En fonction d'une définition de be cette fonction peut échouer

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

Pour que ça marche :

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

Veuillez consulter l'explication de Option --no-scope-shadowing

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X