source是一个便捷的外置,它接受参数、解析中的并在shell环境中执行它们。该文件的内容由source读取,然后传递给工具语言(TCL)类库,该例程执行命令。

如今让我们学习怎样在Linux上使用source执行命令和使用shell环境,并简略说明它与bash命令的区别。

使用source执行文件中的命令

要使用source命令,您首先须要创建一个示例文件并使用一些shell命令填充它。首先使用touch命令创建一个新文件。在您选择的文本编辑器中打开文件并编撰一些基本的shell命令。

touch linuxmi.txt
vim linuxmi.txt

# 在文本文件中写入命令:
echo "Hello!Linux迷 linuxmi.com"
pwd
ls

linux的source命令_linux source 命令_linux下source命令

# 使用Source语法或点语法 . linuxmi.txt source linuxmi.txt

写出文本文件并继续将其作为参数传递给source命令。系统将执行文件中的命令并返回输出。

如今您早已了解了怎样使用source的基础知识linux source 命令,让我们尝试修改Bashshell环境。并且,在继续之前,您必须对Linux中的环境变量有基本的了解。

使用source命令更新BashShell环境

在Linux上,环境变量是承继但不可变的。倘若您执行更改环境变量$TEST的Bashshell,该脚本将生成一个新的分叉shell进程,而且$TEST的更改将在其中而不是原始Bash环境中进行。

子进程将难以更改父进程的环境。它只能更改自己的环境。让我们用一个实际的事例来理解这一点:

linux下source命令_linux source 命令_linux的source命令

export TEST="deb"
vim linuxmi

# 在文件中键入这些命令
export TEST="bed"
echo $TEST
# 写文件,使其可执行,然后执行它
chmod +x linuxmi

linux的source命令_linux下source命令_linux source 命令

./linuxmi # 这将返回 "bed" echo $TEST # 这将返回 "deb"

这就是source命令发挥作用的地方。使用source命令linux source 命令,您可以在相同的shell环境中执行脚本,否则会被分叉。为此,假若您获取更改环境变量的脚本,它将对Bashshell环境进行修改。

要对其进行测试,请将前面代码框中的命令写入一个新文件并使用source命令而不是使其可执行。

# 创建一个新文件并编辑它
vim linux
.linux
echo $TEST # 运行后返回 "bed"

如您所见linux应用程序,使用source命令,您可以更新父进程的环境变量。这是source命令的主要用例,即更改父环境。

这就是使用source命令更新Bashshell环境所需的所有步骤。

Linuxbash和source命令之间的区别

Linuxbash和source命令的区别在于,当你用bash命令执行脚本时,它告诉Linux内核创建一个新的Bash进程来读取和执行脚本,将输出复制到原先的shell进程中,并显示下来.

然而source命令是一个外置的shell,它读取和评估当前shell进程中的文件。为此,脚本所做的所有修改都将保留在Bashshell中。

排除source命令错误

在个别Linux系统中,您可能会在尝试使用source命令时遇见错误“找不到source”。您可以通过两种方法修补此错误:

1.换shell

linux source 命令_linux的source命令_linux下source命令

个别shell不支持source命令。在这些情况下,您须要使用chsh-s($whichshell_name)命令修改您的shell环境。

在修改shell后启动一个新的终端,并尝试使用source命令。假如新的shell支持source命令,这么它应当可以完美地工作。

2.使用点/句点句型

一些shell环境不支持“source”语法,而是支持“.”语法。“source”语法是Bash中点的同义词。但这在POSIXshell中不起作用,因而为了获得最大的兼容性linux空间,请使用句点句型。

你应当晓得的基本Linux命令

Linuxshell命令是使用终端与系统交互的好方式。它们是使用*NIX系统的本质。

尽管您不须要了解所有命令,但熟悉一些有用的命令肯定会在您深入Linux世界时取得丰硕成果。

本文原创地址://sclmfb.cn/lzsmldsyzxml.html编辑:刘遄,审核员:暂无