Bagaimana saya bisa mengatur variabel lingkungan untuk hanya satu perintah di shell ikan?


49

Dalam bash, aku bisa melakukannya EDITOR=vim crontab -e. Bisakah saya mendapatkan efek serupa di kulit ikan?

Jawaban:


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

2
adakah cara yang lebih mudah untuk melakukan ini?
Milovan Zogovic

anehnya, ini tidak berhasil untuk saya. Saya menelepon skrip ruby, dan ENV tidak mengambil variabel yang saya setting:set -lx date '12/04/2012'
Duke

@ Duke: Ini bekerja untuk saya. begin; set -lx date '12/04/2012'; ruby -e 'puts ENV["date"]'; end
Dennis Williamson

10
Sementara itu, ini telah dijawab dalam FAQ Ikan: fishshell.com/docs/current/faq.html#faq-single-env
harm.

2
Dan apa yang dikatakan oleh FAQ adalah ini:env SOME_VAR=1 command
BallpointBen

72

Jangan melihat mengapa ini tidak berhasil: env EDITOR=vim crontab -e
Itu memotong shell sepenuhnya.


3
Ini jauh lebih mudah. Satu-satunya masalah adalah bahwa melewati shell melarang perintah ikan kustom, yang mungkin terkunci dalam memori otot Anda.
JohnMetta

Saya melihat itu di dokumen juga, tapi mengapa tidak berhasil? env SOME_VAR=1 echo $SOME_VAR
Pendekar

tidak apa-apa, saya seharusnya mencarinya: stackoverflow.com/questions/10938483/…
lmsurprenant

10

Itu dari Dokumentasi

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

Gunakan perintah env.

env SOME_VAR=1 command

Anda juga bisa mendeklarasikan variabel lokal di blok dan itu tidak akan melewati shell

begin
  set -lx SOME_VAR 1
  command
end

2

tergantung pada definisi befungsi, ini bisa gagal

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

Agar itu berfungsi:

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

Silakan, lihat penjelasan opsi --no-scope-shadowing

-S atau --no-scope-shadowing memungkinkan fungsi untuk mengakses variabel fungsi panggilan. Biasanya, setiap variabel di dalam fungsi yang memiliki nama yang sama dengan variabel dari fungsi panggilan "dibayangi", dan isinya tidak tergantung pada fungsi panggilan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.