Làm cách nào tôi có thể đặt biến môi trường cho chỉ một lệnh trong vỏ cá?


49

Trong bash, tôi có thể làm EDITOR=vim crontab -e. Tôi có thể có được hiệu ứng tương tự trong vỏ cá?

Câu trả lời:


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

2
Có cách nào dễ dàng hơn để làm điều này?
Milovan Zogovic

Thật kỳ lạ, điều này không làm việc cho tôi. Tôi đang gọi một tập lệnh ruby ​​và ENV không nhận biến tôi đang cài đặt:set -lx date '12/04/2012'
Duke

@Duke: Nó làm việc cho tôi. begin; set -lx date '12/04/2012'; ruby -e 'puts ENV["date"]'; end
Dennis Williamson

10
Trong khi đó, điều này đã được trả lời trong Câu hỏi thường gặp về cá: fishshell.com/docs/civerse/faq.html#faq-single-env
làm hại

2
Và những gì Câu hỏi thường gặp nói là:env SOME_VAR=1 command
BallpointBen

72

Đừng xem lý do tại sao điều này không hoạt động: env EDITOR=vim crontab -e
Điều đó bỏ qua hoàn toàn vỏ.


3
Điều này là rất dễ dàng hơn nhiều. Vấn đề duy nhất là việc bỏ qua lớp vỏ không cho phép bất kỳ lệnh cá tùy chỉnh nào có thể bị khóa trong bộ nhớ cơ của bạn.
JohnMetta

Tôi cũng thấy điều đó trong các tài liệu, nhưng tại sao không làm việc sau đây? env SOME_VAR=1 echo $SOME_VAR
lmsurprenant


10

Đó là từ Tài liệu

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

Sử dụng lệnh env.

env SOME_VAR=1 command

Bạn cũng có thể khai báo một biến cục bộ trong một khối và điều đó sẽ không bỏ qua trình bao

begin
  set -lx SOME_VAR 1
  command
end

2

tùy thuộc vào một định nghĩa của bechức năng, điều này có thể thất bại

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

Để nó hoạt động:

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

Xin vui lòng, xem giải thích về tùy chọn --no-scope-Shadowing

-S hoặc --no-scope-Shadowing cho phép hàm truy cập các biến của hàm gọi. Thông thường, bất kỳ biến nào bên trong hàm có cùng tên với các biến từ hàm gọi là "bóng" và nội dung của chúng độc lập với hàm gọi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.