魚のシェルで1つのコマンドだけに環境変数を設定するにはどうすればよいですか?


49

bashでは、できますEDITOR=vim crontab -e。Fish Shellで同様の効果を得ることができますか?

回答:


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

2
これを行う簡単な方法はありますか?
ミロヴァンゾゴヴィッチ

奇妙なことに、これは私には機能しません。私は、Rubyスクリプトを呼んでいる、とENVは、私が設定してい変数ピックアップしていません:set -lx date '12/04/2012'
デューク

@デューク:それは私のために動作します。begin; set -lx date '12/04/2012'; ruby -e 'puts ENV["date"]'; end
デニスウィリアムソン

10
一方、これはFish FAQで回答されています:fishshell.com/docs/current/faq.html#faq-single-env
harm

2
そして、よくある質問は次のとおりですenv SOME_VAR=1 command
BallpointBen

72

これがうまくいかない理由がわからない: env EDITOR=vim crontab -e
それはシェルを完全にバイパスする。


3
これはとても簡単です。唯一の問題は、シェルをバイパスすると、カスタムのフィッシュコマンドが許可されなくなり、おそらく筋肉の記憶にロックされることです。
ジョンメッタ

私もドキュメントでそれを見ましたが、なぜ次のように動作しないのですか?env SOME_VAR=1 echo $SOME_VAR
lmsurprenant

気にしないで、私はそれを調べておくべきでした: stackoverflow.com/questions/10938483/…–
lmsurprenant

10

それはドキュメントからです

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

envコマンドを使用します。

env SOME_VAR=1 command

ブロックでローカル変数を宣言することもできますが、それはシェルをバイパスしません

begin
  set -lx SOME_VAR 1
  command
end

2

be関数の定義によっては、これは失敗する可能性があります

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

動作させるには:

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

--no-scope-shadowingオプションの説明をご覧ください

-Sまたは--no-scope-shadowingは、関数が呼び出し関数の変数にアクセスできるようにします。通常、呼び出し元の関数からの変数と同じ名前を持つ関数内の変数は「シャドウ」され、その内容は呼び出し元の関数から独立しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.