linux命令.md 5.7 KB

什么是source命令?

运行shell时,会同时存在两种变量:

  • 1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
  • 2) 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。

在 Linux 中,source 命令用于执行指定的 shell 脚本文件,并将脚本文件中的所有命令都当作当前 shell 环境的命令来运行。简单地说,source 命令可以让你在当前的 shell 环境中执行一个脚本文件,并将其中定义的环境变量和函数等内容加载到当前的 shell 环境中。

具体而言,source 命令可以实现如下功能:

  1. 在当前 shell 环境中载入指定脚本文件的内容,包括环境变量、函数等。
  2. 不创建新的子 shell 进程,而是在当前 shell 环境中执行脚本文件中的命令,从而实现在当前 shell 中设置环境变量或执行函数等操作。

使用 source 命令的常见场景包括:

  1. 执行 shell 脚本文件,以实现设置环境变量、执行别名或函数等功能。
  2. 加载特定的 shell 配置文件,例如 ~/.bashrc 或 /etc/profile,以初始化 shell 环境。

总之,source 命令可以帮助你在当前的 shell 环境中执行指定的脚本文件,并将其中定义的环境变量、函数等内容加载到当前的 shell 操作中,非常有用。

简单例子

export var=999

如果./my.sh,运行后,执行echo $var是空的。

如果source ./my.sh运行后,执行echo $var会显示999。

因为调用./my.sh来执行shell是在一个子shell里运行的,所以执行后,里面定义的变量并没有反应到本shell里,但是 source不同,是在本shell中执行的,所以本shell能够看到其定义的变量。

export命令

在 Linux 中,export 命令用于向当前 shell 环境中添加新的环境变量,使其能被当前 shell 环境及其子进程所访问和使用。简单地说,export 命令可以将一个变量设置为环境变量,从而可以在当前 shell 会话中以及当前 shell 的子进程中使用该变量。

具体而言,export 命令可以实现如下功能:

  1. 将指定的变量设置为当前 shell 环境的环境变量。
  2. 将环境变量持久化保存到系统文件中,以便在下次启动时仍然可用。
  3. 环境变量的作用范围不仅限于当前 shell 环境,还包括当前 shell 环境的所有子进程,因此可以实现父子进程之间的环境变量共享。

使用 export 命令可以将一个普通变量设置为环境变量,例如:

MY_VAR="hello"
export MY_VAR

这样就将 MY_VAR 变量设置为当前 shell 环境的环境变量,以便在当前 shell 会话和当前 shell 的子进程中使用。

同时,你也可以直接在一行中同时定义和导出一个环境变量,例如:

export MY_VAR="hello"

这样也可以将 MY_VAR 设置为环境变量,并将其导出到当前 shell 环境中。

总之,export 命令可以将指定变量设置为环境变量,并将其在当前 shell 环境及其子进程中进行共享和使用,非常有用。

#!/bin/bash 作用

#!/bin/bash 是一种脚本文件的头部声明,也称为 Shebang 或 Hashbang。在 Linux 和 Unix 系统中,这行命令用于指定解释器的路径,让操作系统知道该如何执行该脚本文件。

具体而言,当一个脚本文件被执行时,操作系统会读取脚本文件的第一行,如果该行指定了解释器的路径,操作系统就会使用该解释器来执行该脚本文件;否则,操作系统会使用默认的解释器来执行该脚本文件(在大多数情况下是 /bin/sh)。

因此,在编写 Shell 脚本时,将 #!/bin/bash 添加到脚本文件的开头可以确保脚本文件将使用 Bash 解释器来执行,而不是其他解释器。同时,还可以通过修改 Shebang 行的内容来指定使用其他解释器来执行脚本文件。

需要注意的是,#!/bin/bash 命令在脚本文件的开头必须是第一行,并且不能有任何空格或其他字符紧随其后,否则该命令将不会被正确识别,从而导致脚本无法执行。

总之,#!/bin/bash 命令的作用是指定解释器的路径,让操作系统知道该如何执行该脚本文件。在编写 Shell 脚本时,通常需要添加该命令到脚本文件的开头。

-e作用

-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 脚本执行过程中出现错误就立即退出并返回非零状态码,从而更好地确保脚本执行的可靠性。