Balık kabuğundaki ortam değişkenini sadece bir komut için nasıl ayarlayabilirim?


49

Bash olarak yapabilirim EDITOR=vim crontab -e. Balık kabuğunda da benzer bir etki bulabilir miyim?

Yanıtlar:


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

2
Bunu yapmanın daha kolay bir yolu var mı?
Milovan Zogovic

garip bir şekilde, bu benim için çalışmıyor. Yakut bir senaryo çağırıyorum ve ENV belirlediğim değişkeni seçmiyor:set -lx date '12/04/2012'
Dük

@ Duke: Bu benim için çalışıyor. begin; set -lx date '12/04/2012'; ruby -e 'puts ENV["date"]'; end
Dennis Williamson,

10
Bu arada, bu Balık SSS’de cevaplandı: fishshell.com/docs/current/faq.html#faq-single-env
harm

2
Ve env SOME_VAR=1 command
BallpointBen

72

Bunun neden işe env EDITOR=vim crontab -e
yaramaması gerektiğini anlamayın : Bu, kabuğu tamamen atlar.


3
Bu çok daha kolay. Tek sorun, kabuğun atlanması, muhtemelen kas hafızanızda kilitli olan herhangi bir özel balık komutuna izin vermemesidir.
JohnMetta

Bunu doktorlarda da gördüm, ama o zaman neden aşağıdaki işe yaramıyor? env SOME_VAR=1 echo $SOME_VAR
lmsurprenant

boşver, sadece
bakmalıydım

10

Bu Dokümantasyon'dan

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

Env komutunu kullanın.

env SOME_VAR=1 command

Ayrıca yerel bir değişkeni bir blokta ilan edebilirsiniz ve bu durum kabuğunu atlamaz.

begin
  set -lx SOME_VAR 1
  command
end

2

beişlev tanımına bağlı olarak bu başarısız olabilir

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

Çalışması için:

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

Lütfen - no-Scope-Shadowing seçeneğinin açıklamasına bakınız.

-S veya --no-Scope-shadowing, işlevin çağıran işlevlerin değişkenlerine erişmesini sağlar. Normalde, işlev içindeki, aynı işlev çağrısı işlevindeki değişkenlerle aynı adı taşıyan değişkenler "gölgelidir" ve içerikleri çağıran işlevden bağımsızdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.