Назад | Перейти на главную страницу

Как я могу установить переменную среды только для одной команды в рыбной оболочке?

В bash я могу сделать EDITOR=vim crontab -e. Могу ли я получить аналогичный эффект в Fish shell?

Не понимаю, почему это не должно работать: env EDITOR=vim crontab -e
Это полностью обходит оболочку.

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

Это из Документация

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

в зависимости от определения 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 позволяет функции получать доступ к переменным вызывающих функций. Обычно любые переменные внутри функции, которые имеют то же имя, что и переменные из вызывающей функции, «затенены», и их содержимое не зависит от вызывающей функции.