Linux中source命令的使用方式

基本介绍

source命令是一个内置的shell命令,用于从当前shell会话中的文件读取和执行命令。

source命令通常用于保留、更改当前shell中的环境变量。

简而言之,source一个脚本,将会在当前shell中运行execute命令。

source命令可用于:

刷新当前的shell环境
在当前环境使用source执行Shell脚本
从脚本中导入环境中一个Shell函数
从另一个Shell脚本中读取变量

source命令的语法

source命令它需要一个文件,如果提供了参数,那么将用作传递脚本的位置参数。

source FILENAME [ARGUMENTS]

也可以使用.替代source命令:

. FILENAME [ARGUMENTS]

如何使用source命令

1. 刷新当前的shell环境

可以在当前的shell环境中定义一个别名。为ls -al定义一个别名为ll:

[root@localhost ~]# echo "alias ll='ls -al'" >> ~/.bashrc

在~/.bashrc文件中定义完别名,可以使用source命令刷新当前shell环境:

[root@localhost ~]# source ~/.bashrc

现在可以使用ll别名列出当前目录里所有文件了,包括隐藏文件。

Linux中source命令的使用方式Linux中source命令的使用方式

2. 在当前环境使用source执行Shell脚本

Shell脚本不知道你在当前Shell环境中定义的变量。source命令可用于在当前会话中执行你的Shell脚本。

下面在定义一个变量:

[root@localhost ~]# website=https://www.linuxprobe.com

Linux中source命令的使用方式Linux中source命令的使用方式 创建一个脚本:

[root@localhost ~]# vim web.sh

web.sh

#!/bin/bash
echo $website

Linux中source命令的使用方式Linux中source命令的使用方式 使用source在当前shell会话中执行它:

[root@localhost ~]# source web.sh
https://www.linuxprobe.com

Linux中source命令的使用方式Linux中source命令的使用方式 当使用bash运行脚本时,找不到环境中定义的变量:

root@ubuntu:~/test_shell# website=https://www.linuxprobe.com
root@ubuntu:~/test_shell# vim web.sh
root@ubuntu:~/test_shell# cat web.sh
#!/bin/bash
echo $website
root@ubuntu:~/test_shell# source web.sh
https://www.linuxprobe.com
root@ubuntu:~/test_shell# bash web.sh

root@ubuntu:~/test_shell#

3. 从脚本中导入环境中一个Shell函数

首先创建一个脚本,定义一个函数:

[root@localhost ~]# vim func.sh

#!/bin/bash
foo(){
  echo "test function!"
}

Linux中source命令的使用方式Linux中source命令的使用方式 要在当前的shell会话中导入上述脚本的功能,使用下面命令:

[root@localhost ~]# source func.sh

下面在终端中执行以下func.sh脚本中的foo函数试试:

[root@localhost ~]# foo
test function!

Linux中source命令的使用方式Linux中source命令的使用方式 source完脚本之后,可以看到在当前回话的终端中可以执行脚本里面的函数。

4. 从另一个Shell脚本中读取变量

首先创建带有一些变量的shell脚本,请输入:

[root@localhost ~]# vim var.sh

var.sh

#!/bin/bash
a=1
b=2
c=3

Linux中source命令的使用方式Linux中source命令的使用方式 再创建一个脚本,该脚本读取上一个脚本var.sh中的变量:

[root@localhost ~]# vim read.sh

read.sh

#!/bin/bash
source var.sh
echo $a
echo $b
echo $c

在脚本中首先使用source将var.sh中的变量到处到当前回话,然后echo显示变量值。下面执行read.sh看一下:

root@ubuntu:~/test_shell# vim var.sh
root@ubuntu:~/test_shell# vim read.sh
root@ubuntu:~/test_shell# cat var.sh
#!/bin/bash
a=1
b=2
c=3
root@ubuntu:~/test_shell# cat read.sh
#!/bin/bash
source var.sh
echo $a
echo $b
echo $c
root@ubuntu:~/test_shell# echo $a

root@ubuntu:~/test_shell# bash read.sh
1
2
3
root@ubuntu:~/test_shell#

Linux中source命令的使用方式Linux中source命令的使用方式

5. 读取并执行命令

source命令可以从文件读取和执行命令。下面的一个文本文件中带有两个命令,使用source命令运行该文件,看看是否会执行里面的命令。

下面创建一个文件cmd.txt,保存两个命令:

[root@localhost ~]# cat cmd.txt
ip ad
date

下面使用source执行这个文件:

root@ubuntu:~/test_shell# vim cmd.txt
root@ubuntu:~/test_shell# cat cmd.txt
ip ad
date
root@ubuntu:~/test_shell# source cmd.txt
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:9b:d2:bc brd ff:ff:ff:ff:ff:ff
    altname enp2s1
    inet 192.168.42.129/24 brd 192.168.42.255 scope global dynamic noprefixroute ens33
       valid_lft 1589sec preferred_lft 1589sec
    inet6 fe80::2473:df4f:c32e:c737/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
Tue 10 Aug 2021 01:20:44 AM PDT
root@ubuntu:~/test_shell#

Linux中source命令的使用方式Linux中source命令的使用方式

总结

source命令在当前shell中执行脚本,而exec命令在新的shell中运行。

文章目录