Перейти к содержимому

Разница между set -g и set -x

0

В настоящее время я перехожу с конфигов bash на рыбу и застрял, переводя мой экспорт через bash. Кажется, есть три способа сделать это в Fish, которые выполняют свою работу, но я не могу сказать, какой из них мне следует использовать, или если у них есть побочные эффекты, о которых я не знаю

set -g VAR value set -x VAR value set -xg VAR value 

Конечно, они не все делают одно и то же. Может кто-нибудь объяснить, в чем различия и в каких ситуациях каждый уместен, пожалуйста?

403 просмотра
11th Hour Worker спросил 8 лет назад
1 18

1 ответ

3
Принятый ответ

Нет, они не все делают одно и то же. -xФлаг ортогональны -g, -lи -uфлаги. Первый просто устанавливает атрибут экспорта в var. Последние три определяют область действия вар. Вы можете иметь глобальную, неэкспортированную VARи внутри функцию do set -lx VAR valueдля создания экспортируемого экземпляра с локальной областью действия. Когда управление возвращается из функции, глобальная область VARснова появляется и не будет экспортирована.

Если вы используете последнюю версию (2.7, возможно, 2.6), вы можете set --show VARотобразить значения во всех трех областях и узнать, экспортируется ли каждая из них.

Извините, что это значит для экспортируемой переменной?

11th Hour Worker · 8 лет назад · 0

Экспортированная переменная видна командам, запускаемым вашей рыбной оболочкой. Сделайте set -g NOT_EXPORTED abc; set -gx EXPORTED def; env | grep EXPORTED. Обратите внимание, что env - это внешняя команда, которая показывает экспортированные переменные, которые она унаследовала. Он должен показать, что присутствует только переменная, созданная с помощью set -gx.

Kurtis Rader · 8 лет назад · 0

Спасибо за объяснение Куртис. Это то, что я понял, но теперь я сбит с толку, почему я вижу переменные окружения, которые я установил внутри моего config.fish, используя set -g?

11th Hour Worker · 8 лет назад · 0

Если переменная уже экспортирована, то set -g сохраняет экспортированный атрибут. Так что, если, например, вы делаете что-то вроде set -g PATH / dir1 / dir2 $ PATH, оно останется экспортированным, потому что это было в экспортированной среде, когда рыба начала работать.

Kurtis Rader · 8 лет назад · 0

Ранее я определил свою переменную с помощью -x для тестирования и не удалял эту строку, ожидая, что она будет перезаписана в моем следующем объявлении моей переменной. Большое спасибо, Куртис! Все это имеет смысл для меня сейчас :)

11th Hour Worker · 8 лет назад · 0
Kurtis Rader ответил 8 лет назад
K 590