Как сохранить функции / переменные локальными для моего zshrc?

любая переменная, которую я объявляю в my zshrc доступно в оболочке в качестве переменной среды. Я не хочу, чтобы это произошло.

Я попытался поместить переменные в функцию и установить их как локальные, но тогда функция доступна вне zshrc.

Как я могу сделать это так что происходит в моем zshrc остается в моем zshrc?

3 ответов


они доступны, но они не экспортируются, поэтому сценарии, запускаемые из командной строки, не получают эти переменные. Если .zshrc выглядит так:

function zshrc()
{
    local VAR=1
    # Do stuff
}
zshrc

и вы тогда не хотите запустить zshrc функция снова вы можете просто сделать

unfunction zshrc

далее.


Если вы используете последнюю версию zsh, вы можете использовать анонимную функцию:

function () {
  local xyz=abc
  # whatever
}

функция будет автоматически выполнена, а затем выброшена, она существует только для целей области видимости.

это работает для любой найденный файл не только zshrc.


если вы не добавляете слово local для переменной он останется, пока вы не выполните одно из следующих действий:

  1. открыть новое окно терминала.
  2. выполнить exec zsh или exec bash в зависимости от вашей оболочки. Это просто очищает ваши локальные переменные, которые не были назначены слово local.

избежать

method_name(){
  a=11
  echo $a
}

Правильный Пример

method_name(){
  local a=11
  echo $a
}

эта переменная ограничена именем функции method_name и доступно только внутри функции при вызове (а не после).

если вы хотите получить прямой доступ к этой локальной переменной, вы можете установить ее таким образом

local z=11

и назовем это так

echo $z

кроме того, переменные среды отличаются от локальных переменных

в зависимости от вашей оболочки и потребностей, вы можете использовать .bash_profile или .bashrc или .zshrc etc. для хранения функций и псевдонимы.

просмотрите эту ссылку для получения дополнительной информации о переменных среды и их соответствующих оболочках

также прочитайте это, чтобы понять, как установить переменные среды в командной строке с помощью расширений оболочки

вы можете быстро просматривать переменные среды с помощью env или printenv

соглашение заключается в использовании верхнего регистра

чтобы временно установить переменную среды (хранится, пока вы закрыть терминал)

export A=11 или export B="11 is part of this string"

предположим, что вы открыли новое окно терминала или источников .zshrc или .bashrc или что вы используете, теперь вы можете использовать эту переменную среды до закрытия сеанса терминала. Примечание: не используйте $ при настройке, но используйте $ при ссылке на переменную.

примеры

echo "A is equal to: $A and that is pretty nice"

echo "$A"

как источник a файл

source ~/path/to/file/filename

пример

source ~/.bash_profile

чтобы установить переменную среды (пока вы не удалите ее или не установите снова)

использовать код выше, но поместите его в ваш ~/.bash_profile или ~/.zshrc или другой соответствующий файл. Сохраните файл и отправьте его.

пример

export B="11 is part of this string"

теперь вы можете просмотреть его с

env

удалить эту среду переменная, удалите ее из файла и снова исходный файл.

чтобы временно удалить переменную среды, используйте unset

пример

unset B

нет $ для отключения.

настройки переменных среды из командной строки

export BLABLA="environment variable set from the command line, saved in file for later use"

Проверьте файл, в который вы его отправляете, он может не начинаться с новой строки, возможно, он был объединен с вашей последней строкой это была какая-то другая функция, псевдоним или что-то еще.

это не полностью исчерпывающий ответ, но это большой шаг в правильном направлении. Он показывает, как область в оболочке терминала может быть установлена, использована и удалена.