在 .bashrc 中使用导出

Mar*_*ter 58 bash environment-variables bashrc

我注意到在我的前面.bashrc有一些行export,例如

export HISTTIMEFORMAT="%b-%d  %H:%M  "
...
export MYSQL_HISTFILE="/root/.mysql_history"
Run Code Online (Sandbox Code Playgroud)

而其他人则没有,例如

HISTSIZE=100000
Run Code Online (Sandbox Code Playgroud)

我想知道,首先,这是否正确,其次export.bashrc.

rep*_*lay 65

您只需要export在 shell 中启动的其他程序应该“看到”的变量,而那些只在 shell 内部使用的变量不需要被export编辑。

这是手册页所说的:

The  supplied  names are marked for automatic export to the environ?
ment of subsequently executed commands.  If the -f option is  given,
the  names  refer to functions.  If no names are given, or if the -p
option is supplied, a list of all names that are  exported  in  this
shell  is  printed.   The -n option causes the export property to be
removed from each name.  If a variable name is  followed  by  =word,
the  value  of  the variable is set to word.  export returns an exit
status of 0 unless an invalid option  is  encountered,  one  of  the
names  is  not a valid shell variable name, or -f is supplied with a
name that is not a function.
Run Code Online (Sandbox Code Playgroud)

这可以通过以下方式证明:

$ MYVAR="value"
$ echo ${MYVAR}
value
$ echo 'echo ${MYVAR}' > echo.sh
$ chmod +x echo.sh
$ ./echo.sh

$ export MYVAR="value-exported"
$ ./echo.sh
value-exported
Run Code Online (Sandbox Code Playgroud)

解释:

  • 我首先设置${MYVAR}为带有MYVAR="value". 使用echoI 可以回显它的值,因为 echo 是 shell 的一部分。
  • 然后我创建echo.sh. 那是一个基本上做相同的小脚本,它只是 echo ${MYVAR},但不同的是它会在不同的进程中运行,因为它是一个单独的脚本。
  • 调用echo.sh时什么都不输出,因为新进程没有继承${MYVAR}
  • 然后我${MYVAR}使用export关键字导出到我的环境中
  • 当我现在echo.sh再次运行时,它会回显 的内容,${MYVAR}因为它是从环境中获取的

所以要回答你的问题:

这取决于变量将在何处使用,是否必须导出它。


Gil*_*il' 27

使用export环境变量。环境变量是操作系统功能。环境变量由子进程继承:如果您在 shell 中设置它们,则它们在此 shell 启动的所有程序中都可用。许多应用程序或特定应用程序而不是 shell 使用的变量是环境变量。以下是一些常见环境变量的示例:

  • HOME— 表示用户的主目录,这是每个用户的配置文件所在的位置。由读取每个用户的配置文件或需要知道用户主目录位置的任何程序使用。
  • PATH— 指示在哪里可以找到可执行文件以启动其他程序。由需要启动另一个程序的每个程序使用。
  • LD_LIBRARY_PATH— 指示在哪里可以找到动态库文件。由每个动态链接的可执行文件使用。
  • EDITOR, VISUAL— 指示需要编辑器时要运行的程序。由需要启动文本编辑器的任何程序使用。
  • DISPLAY, XAUTHORITY— 表示如何连接到 X11 服务器。由 X11 客户端(即 GUI 程序)使用。
  • LESS— 选项在less运行时自动打开。由 使用less
  • http_proxy— 表示要使用的 Web 代理。被大多数网络浏览器使用。

不要export用于 shell 变量。Shell 变量是作为编程语言的 Shell 的一个特性。Shell 变量仅在设置它们的 Shell 内使用;它们对 shell 启动的程序没有意义。创建子外壳时,外壳变量会重复,就像外壳状态的其余部分一样。以下是一些对流行 shell 有意义的 shell 变量示例:

  • PS1 — 在每个命令之前显示的提示。
  • IFS — 在不带引号的变量扩展和命令替换中分隔单词的字符。
  • HISTFILE — shell 将在其中写入命令历史记录的文件。

除了 shell 使用的变量之外,大多数 shell 脚本将变量用于其内部目的。

大多数环境变量(例如PATH)对整个会话都有意义,应该在~/.profile或类似文件中设置。仅对特定 shell(例如PS1)有意义的变量应在特定于 shell 的文件中设置,例如~/.bashrc~/.zshrc。请参阅是否有所有 shell 读取的“.bashrc”等效文件?


Zel*_*lda 5

对于 bash 内部变量,您不需要export. 从你的例子 HISTTIMEFORMAT是使用bash的本身并不需要出口 MYSQL_HISTFILEmysql和需要出口,否则mysql不会看见它。