Linux 中的 Export 命令详解
Linux 中的 export 命令用于创建环境变量。你可以像这样使用它:
export myvar
或者像这样的简写来立即为其分配一个值:
export myvar=5
您可以使用echo 命令查看导出变量的值:
echo $myvar
为了使更改永久生效,您应该将其添加到 ~/.bashrc 文件中。
这只是简短的总结。让我们详细了解一下,以便更好地理解。
了解导出命令的工作原理
在下面的例子中,我声明了一个 shell 变量 var 并为其赋值 3。它现在是一个 shell 变量。
abhishek@nuc:~$ var=3
abhishek@nuc:~$ echo $var
3
如果我退出终端并打开一个新终端,这个 shell 变量就会消失。如果我想在 shell 脚本中使用此变量,它将无法工作。同样,如果我切换用户(从而以该用户启动新 shell),这个 shell 变量将不可用:
abhishek@nuc:~$ su prakash
Password:
prakash@nuc:/home/abhishek$ echo $var
现在,让我们回到上一个用户(也就是我声明 shell 变量的上一个 shell)。您可以看到变量仍然存在(因为我们还没有终止此 shell 会话):
prakash@nuc:/home/abhishek$ exit
exit
abhishek@nuc:~$ echo $var
3
所以,现在如果我在此处对变量使用 export 命令var
,它将成为一个环境变量,并且可供此会话中的所有子 shell、用户和 shell 脚本使用。
abhishek@nuc:~$ export var
abhishek@nuc:~$ echo $var
3
abhishek@nuc:~$ su prakash
Password:
prakash@nuc:/home/abhishek$ echo $var
3
您可以使用 printenv 命令检查所有环境变量:
printenv
使用 bashrc 文件使导出的 shell 变量“永久”
但斗争还没有结束。如果你关闭会话、退出终端、注销或重新启动系统,你的环境变量将再次消失。
这就是为什么将导出命令添加到 shell 的运行时配置 (rc) 文件中是一种常见做法。
每个 shell 都有这个位于用户主目录中的 rc 文件,用于确定 shell 启动时的变量和其他配置。作为用户,您可以使用这个 rc 文件来自定义您的 shell 及其行为。
如果你使用的是 bash shell,那么在~/.bashrc中应该有一个 bashrc 文件。你可以在Vim等文本编辑器中编辑此文件,也可以将export var=3(或任何你要导出的内容)附加到此文件。
完成后,您应该使用 source 命令使更改立即可用。
一个好的做法是将所有用户定义的环境变量保存在一个地方。
为什么要使用导出命令?
导出命令最常见的用途之一是当您想要向路径添加某些内容时,以便您的 Linux 系统能够找到特定的命令/可执行文件。
例如,如果您安装了maven并且希望能够运行它,则应该将 maven 可执行文件的目录位置添加到路径中,如下所示:
export PATH=/opt/maven/bin:$PATH
它有什么作用?它将此目录位置添加到路径中。当您尝试在 Linux 中运行命令时,系统会在 PATH 变量中提到的目录中搜索其可执行文件(通常在 bin 目录中)。
abhishek@nuc:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
abhishek@nuc:~$ export PATH=/opt/maven/bin:$PATH
abhishek@nuc:~$ echo $PATH
/opt/maven/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
我强烈建议阅读有关 Linux 目录结构的文章以获得更好的理解。
附加提示:从导出列表中删除变量
假设您想删除“导出”变量。您可以按以下方式使用否定选项:
export -n myvar
请记住,这不会重置变量的值。它只会将导出的全局变量转换为局部变量。它将继续具有您之前设置的相同值。
如果要从导出列表中删除变量以及删除其分配的值,请使用 unset 选项:
unset myvar
希望你现在对 Linux 中的 export 命令有了更好的了解。如果你有疑问,请随时在评论部分提问。