如何将函数/变量保存在我的zshrc本地?

时间:2012-12-02 07:25:56

标签: zsh zshrc

我在zshrc中声明的任何变量在shell中都可用作环境变量。我不希望这种情况发生。

我尝试将变量放在函数中并将它们设置为本地变量,但是该函数在zshrc之外可用。

我怎样才能这样做我的zshrc中发生的事情会留在我的zshrc 中?

4 个答案:

答案 0 :(得分:30)

如果您使用的是最新版本的zsh,则可以使用匿名函数:

function () {
  local xyz=abc
  # whatever
}

该功能将自动执行然后丢弃,它仅用于作用范围。

这适用于任何源文件,而不仅仅是zshrc。

答案 1 :(得分:20)

它们可用,但它们不会导出,因此从命令行启动的脚本不会获取这些变量。如果您的.zshrc看起来像

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

然后您再也不想再启动zshrc功能了

unfunction zshrc

之后。

答案 2 :(得分:7)

如果您没有将单词local附加到变量,它将保留,直到您执行以下操作之一:

  1. 打开一个新的终端窗口。
  2. 根据您的shell运行exec zshexec bash。这只是清除了未使用单词local分配的本地变量。
  3. 避免这个

    method_name(){
      a=11
      echo $a
    }
    

    正确示例

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

    此变量的作用域为函数名method_name,仅在调用时(而不是之后)在函数内部可用。

    如果您想直接访问该局部变量,可以这样设置

    local z=11

    并以这种方式称呼

    echo $z

    此外,环境变量与局部变量

    不同

    根据您的外壳和需求,您可以使用.bash_profile.bashrc.zshrc等来存储功能和别名。

    View this reference for more on environment variables and their respective shells

    Also read this to understand how to set environment variables on the command line using shell expansions

    您可以使用envprintenv

    快速查看环境变量

    惯例是使用大写

    临时设置环境变量(存储到关闭终端之前)

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

    假设您已经打开了一个新的终端窗口或源.zshrc或.bashrc或者您正在使用的任何一个,您现在可以使用此环境变量,直到您关闭终端会话。注意:设置时不要使用$,但在引用变量时请使用$。

    实施例

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

    echo "$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"

    检查您要发送给它的文件,它可能无法从新行开始,它可能已连接到您的最后一行,这是其他功能,别名或其他。

    这不是一个完全全面的答案,但它是朝着正确方向迈出的一大步。它显示了如何设置,使用和删除终端shell中的作用域。

答案 3 :(得分:0)

显然有一个 bash 约定用双下划线命名“私有”函数......当然它们实际上并不是私有的。我在我的 .zshrc 中使用了这个约定。

function __comment()
{
  curr=`pwd`
  echo "$curr $*"
}

__comment 'Here is a Comment'