Как я могу установить переменную среды только для одной команды в оболочке рыбы?
В Bash я могу сделать EDITOR=vim crontab -e
, Могу ли я получить подобный эффект в рыбной раковине?
6 ответов
Не понимаю, почему это не должно работать:env EDITOR=vim crontab -e
Это полностью обходит оболочку.
Это из документации
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
Начиная с версии 3.1 , вы можете использовать тот же синтаксис, что и в bash (EDITOR=vim crontab -e
).
PR, представляющий эту функцию:https://github.com/fish-shell/fish-shell/pull/6287 .
В зависимости от определения 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 позволяет функции получать доступ к переменным вызывающих функций. Обычно любые переменные внутри функции, которые имеют то же имя, что и переменные из вызывающей функции, являются "затененными", и их содержимое не зависит от вызывающей функции.
В оболочке Fish вы можете установить переменную среды только для одной команды, добавив к команде префикс назначения переменной. Вот синтаксис:
VARNAME=value command
Например, если вы хотите установить переменную среды для определенной команды, вы должны сделать:
MY_VARIABLE=some_value your_command_here
Это устанавливает переменную среды только на времяyour_command_here
команда. После завершения команды переменная среды вернется к своему предыдущему значению (или будет удалена, если ее раньше не существовало).
Вот более конкретный пример:
MY_VARIABLE=some_value echo $MY_VARIABLE
В этом примереecho $MY_VARIABLE
выведетsome_value
, но если вы проверите значениеMY_VARIABLE
после команды оно не будет изменено:
echo $MY_VARIABLE # Outputs the original value of MY_VARIABLE
Этот метод специфичен для синтаксиса оболочки Fish и может не работать в других оболочках, таких как Bash или Zsh. Если вам нужен более общий подход, который работает в разных оболочках, вы можете рассмотреть возможность использования подоболочки:
env MY_VARIABLE=some_value your_command_here
При этом создается подоболочка с указанным набором переменных среды, и изменение изолируется от этой подоболочки.