详解Linux 4种方法运行bash脚本以及使脚本可从任何目录执行
作者:admin 时间:2026-3-17 10:1:29 浏览:Linux中你可以通过解释器调用bash脚本来运行它,而无需授予执行权限。只要你具有访问权限,就可以使用bash、sh或source来执行它,即使它是不可执行的。在本文中,将介绍如何使用bash、sh和source来启动脚本。

使用bash命令运行脚本
$ bash greetings.sh
解释代码
这通过显式调用bash来执行脚本,因此文件不需要执行权限。
使用sh运行脚本
$ sh greetings.sh
解释代码
这将使用系统的默认shell运行脚本。
使用source运行脚本
$ source greetings.sh
解释代码
source命令通常用于在当前shell中运行脚本,以便脚本所做的更改在完成后保持活动状态。在这里,它直接在正在进行的shell会话中运行greetings.sh中的命令,而不是启动一个新的子shell。
注意
当脚本必须修改你的活动shell环境时使用source,例如导出环境变量或创建函数或别名。对于不影响活动shell的备份、安装或打印输出等任务,使用bash或sh就足够了。不影响活动shell会话的内容。
使用./前缀运行脚本
$ ./greetings.sh
注意
如果你没有使用chmod +x使脚本可执行,则此方法将失败。
从任何目录运行bash脚本
创建一个名为test的测试目录。
$ mkdir test
移动到该目录并尝试运行脚本。
$ cd test/ && ./greetings.sh
输出:
-bash:./ greetings.sh:No such file or directory
如果你尝试在脚本自己的目录外使用bash、sh、source或./运行bash脚本,它将失败并显示“No such file or directory”消息。唯一的例外是当你提供脚本的绝对路径时,或者当脚本的文件夹添加到你的PATH环境变量时。
使脚本可从任何目录执行
要从Linux机器上的任何位置使用bash脚本,需要将其存储在系统的PATH变量中已经列出的文件夹中。当你输入命令时,你的shell会检查每个PATH目录。当脚本位于这些目录之一时,它就不再是一个只能在其原始文件夹中运行的文件,而是有效地成为一个全局命令,你可以从文件系统上的任何位置调用它。
在下面的步骤中,你将显示当前的PATH值,然后将bash脚本移动到/usr/local/bin/。
显示你的PATH环境变量。
$ echo $PATH
输出:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
上面的输出是PATH中包含的文件夹集合,在这些位置上可执行的任何东西都可以从系统上的任何地方启动。
返回到你的主目录。
$ cd
把你的bash脚本移到/usr/local/bin。
$ sudo mv greetings.sh /usr/local/bin/
脚本现在可以全局运行。
$ greetings.sh
解释:
目录/usr/local/bin用于用户添加的工具和脚本,并且已经是PATH的一部分,因此它不会与系统管理的软件冲突。因为它是一个系统文件夹,你需要sudo来移动文件到那里。一旦放入,机器上的任何用户都可以运行脚本。
你还可以将脚本放在~/.local/bin中,使其仅对你自己的帐户可用。此位置用于个人可执行文件,因此你可以在那里管理脚本,而无需使用sudo。在下面的步骤中,你将创建~/.local/bin,将你的脚本移动到其中,然后将该文件夹添加到你的PATH,以便只有你的用户可以全局运行它。
切换到主文件夹。
$ cd
创建~/.local/bin目录。
$ mkdir -p ~/.local/bin
将你的脚本移动到~/.local/bin。
$ mv greetings.sh ~/.local/bin/
查看该文件夹是否已在你的PATH中。
$ echo $PATH | grep -o "$HOME/.local/bin"
如果你没有看到输出,那么~/.local/bin还不是你的PATH的一部分,你必须在shell配置中手动添加它。
将~/.local/bin添加到shell配置文件中的~/.bashrc。
$ echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
重新安装你的shell设置,以便立即应用更新。
$ source ~/.bashrc
验证~/.local/bin现在是否包含在PATH中。
$ echo $PATH | grep -o "$HOME/.local/bin"
从任何文件夹运行脚本,例如~/test2。
$ mkdir -p ~/test2 && cd ~/test2 && greetings.sh
从路径目录中删除Bash脚本
如果你不再希望该脚本全局可用,则可以将其从你放置它的任何PATH目录中删除。在下面的步骤中,从 /usr/local/bin/ 和 ~/.local/bin/ 中删除 greetings.sh。
从/usr/local/bin/中删除它。
$ sudo rm /usr/local/bin/greetings.sh
从~/.local/bin/中删除脚本。
$ rm ~/.local/bin/greetings.sh
因为此文件夹属于你的用户,所以你不需要sudo来删除该文件。
确认脚本不再全局可用,例如从~/test2开始。
$ greetings.sh
输出:
-bash: /home/linuxuser/.local/bin/greetings.sh: No such file or directory
此时,脚本只能使用./greetings.sh从你的主目录再次运行。
总结
在本文中,介绍了多种方式执行bash脚本,还了解了如何通过将脚本放在PATH文件夹中使脚本在系统范围内可用:/usr/local/bin/文件夹用于每个用户,或~/.local/bin/文件夹仅用于你的个人帐户。



