运行shell时,会同时存在两种变量:
在 Linux 中,source 命令用于执行指定的 shell 脚本文件,并将脚本文件中的所有命令都当作当前 shell 环境的命令来运行。简单地说,source 命令可以让你在当前的 shell 环境中执行一个脚本文件,并将其中定义的环境变量和函数等内容加载到当前的 shell 环境中。
具体而言,source 命令可以实现如下功能:
使用 source 命令的常见场景包括:
总之,source 命令可以帮助你在当前的 shell 环境中执行指定的脚本文件,并将其中定义的环境变量、函数等内容加载到当前的 shell 操作中,非常有用。
export var=999
如果./my.sh
,运行后,执行echo $var
是空的。
如果source ./my.sh
运行后,执行echo $var
会显示999。
因为调用./my.sh
来执行shell
是在一个子shell
里运行的,所以执行后,里面定义的变量并没有反应到本shell
里,但是 source
不同,是在本shell
中执行的,所以本shell能够看到其定义的变量。
在 Linux 中,export 命令用于向当前 shell 环境中添加新的环境变量,使其能被当前 shell 环境及其子进程所访问和使用。简单地说,export 命令可以将一个变量设置为环境变量,从而可以在当前 shell 会话中以及当前 shell 的子进程中使用该变量。
具体而言,export 命令可以实现如下功能:
使用 export 命令可以将一个普通变量设置为环境变量,例如:
MY_VAR="hello"
export MY_VAR
这样就将 MY_VAR 变量设置为当前 shell 环境的环境变量,以便在当前 shell 会话和当前 shell 的子进程中使用。
同时,你也可以直接在一行中同时定义和导出一个环境变量,例如:
export MY_VAR="hello"
这样也可以将 MY_VAR 设置为环境变量,并将其导出到当前 shell 环境中。
总之,export 命令可以将指定变量设置为环境变量,并将其在当前 shell 环境及其子进程中进行共享和使用,非常有用。
#!/bin/bash
是一种脚本文件的头部声明,也称为 Shebang 或 Hashbang。在 Linux 和 Unix 系统中,这行命令用于指定解释器的路径,让操作系统知道该如何执行该脚本文件。
具体而言,当一个脚本文件被执行时,操作系统会读取脚本文件的第一行,如果该行指定了解释器的路径,操作系统就会使用该解释器来执行该脚本文件;否则,操作系统会使用默认的解释器来执行该脚本文件(在大多数情况下是 /bin/sh)。
因此,在编写 Shell 脚本时,将 #!/bin/bash
添加到脚本文件的开头可以确保脚本文件将使用 Bash 解释器来执行,而不是其他解释器。同时,还可以通过修改 Shebang 行的内容来指定使用其他解释器来执行脚本文件。
需要注意的是,#!/bin/bash
命令在脚本文件的开头必须是第一行,并且不能有任何空格或其他字符紧随其后,否则该命令将不会被正确识别,从而导致脚本无法执行。
总之,#!/bin/bash
命令的作用是指定解释器的路径,让操作系统知道该如何执行该脚本文件。在编写 Shell 脚本时,通常需要添加该命令到脚本文件的开头。
-e
是 Bash 脚本中的一个选项,用于指定在脚本执行过程中如果出现错误就立即退出并返回非零(非正常)状态码。
具体而言,当在 Bash 脚本中添加了 set -e
命令后,表示开启了该选项(也可以使用 set -o errexit
),此时如果在脚本的任何一行命令或管道执行失败,Bash 就会立即退出并返回非零状态码。这个特性可以确保脚本在执行过程中出现错误后可以立即停止执行,避免产生更多的错误。
举个例子,假设有一个名为 test.sh
的 Shell 脚本文件,它的内容如下:
#!/bin/bash
set -e
echo "start"
command_not_exist
echo "end"
其中,set -e
指定了开启 -e
选项,command_not_exist
是一条不存在的命令。
如果在执行该脚本时,命令 command_not_exist
执行失败,那么该脚本就会立即退出,并且不会输出 "end"。同时,脚本会返回一个非零状态码(通常是 1),表示脚本执行过程中发生错误。
总之,-e
选项可以确保在 Bash 脚本执行过程中出现错误就立即退出并返回非零状态码,从而更好地确保脚本执行的可靠性。