如何使用 Linux source 从文件中读取和执行命令

source 是一个方便的内置 shell 命令,它接受参数、解析脚本中的命令并在 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

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

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

现在您已经了解了如何使用 source 的基础知识,让我们尝试更改 Bash shell 环境。但是,在继续之前,您必须对Linux 中的环境变量有基本的了解。

使用 source 命令更新 Bash Shell 环境

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

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

export TEST="deb"
vim linuxmi

# 在文件中键入这些命令
export TEST="bed"
echo $TEST

# 写文件,使其可执行,然后执行它
chmod +x linuxmi
./linuxmi # 这将返回 "bed"
echo $TEST # 这将返回 "deb"

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

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

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

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

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

Linux bash 和 source 命令之间的区别

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

但是 source 命令是一个内置的 shell,它读取和评估当前 shell 进程中的文件。因此,脚本所做的所有更改都将保留在 Bash shell 中。

排除 source 命令错误

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

1.换 shell

某些 shell 不支持 source 命令。在这种情况下,您需要使用 chsh -s ($which shell_name)命令更改您的 shell 环境。

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

2. 使用点/句点语法

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

你应该知道的基本 Linux 命令

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

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

The post 如何使用 Linux source 从文件中读取和执行命令 first appeared on Linux迷.

版权声明:
作者:zhangchen
链接:https://www.techfm.club/p/35547.html
来源:TechFM
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>