如何让 Shell 脚本全局执行

发布于 2023-05-05 22:09:44 字数 2838 浏览 65 评论 0

配图源自 Freepik

碰巧前面一篇文章中浅浅介绍了一下 Shell。然后最近刚好要写一个 Shell 脚本去批量去处理一下文件,因此写下来记录一下,尽管思路很简单。

假设我们 ~/Desktop 目录下有一个 Shell 脚本 myscript.sh,如下:

#!/bin/bash
echo "The first shell script..."

使用 source 命令便可执行此脚本:

$ source ~/Desktop/myscript.sh
The first shell script...

然后我在想能否将 source 指令也省略掉呢,直接 myscript.sh 这样:

$ cd ~/Desktop
$ myscript.sh
zsh: command not found: myscript.sh

然后 Shell 解析器将 myscript.sh 识别成了一个「指令」,而不是一个文件。由于 Shell 脚本的扩展名是可选的,因此尝试将 .sh 扩展名去掉试试:

$ myscript
zsh: permission denied: myscript

跟前面有点不一样了,它提示没有权限。哦,原来一个 Shell 脚本只有具备了「可执行权限」方可被执行。那好办,我们将其权限改一改:

$ chmod u+x myscript

其中 chmod 命令用于改变文件或目录的权限,u 表示所有者用户,x 表示执行权限,+ 表示增加权限。

其实通过 Finder 可以观察到其图标变了样(不同系统可能不一样),该图标表示可执行文件。

于是我们兴高采烈地执行了:

$ myscript
zsh: command not found: myscript

可现实却狠狠地打了一巴掌,咋回事!!!原来是要将「可执行文件」所在目录配置到 PATH 环境变量中,因为在终端工具中输入指令的时候,系统会从环境变量 PATH 所包含的路径中「逐一查找」相应的可执行文件,如果最后都找不到的话,就会抛出错误并提示找不到指令。

所以有几种解决方法:

  • 一是,将其拷贝至环境变量 PATH 的某个目录(如 /usr/bin 等)里面,cp ~/Desktop/myscript /bin/myscript(个人不喜欢这样处理)。
  • 二是,创建一个软链接到环境变量 PATH 目录中,比如 ln -s ~/Desktop/myscript /bin/myscript(个人不喜欢这样处理)。
  • 三是,在 Shell 配置文件中,将可执行文件所在目录添加到环境变量 PATH 中即可。就用它吧,毕竟这个只是测试脚本,写完文章是要删掉的。

在 Shell 配置文件中加入 ~/Desktop 路径即可:

export PATH=$PATH:$HOME/Desktop

具体是哪个配置将取决于你使用的是哪一种 Shell,我这里是 zsh,因此用户级别的配置文件是 ~/.zshrc 文件,添加完之后,记得 source ~/.zshrc 刷新变量使其生效。

至此,你就可以在任意目录下执行 myscript 指令了。

$ cd ~
$ myscript
The first shell script...

这样执行脚本也不用输入那一串长长的地址,舒服多了。

One more thing...

前面我们为了不让 myscript.sh 被识别为一个指令,因此把扩展名删掉了。但如果我们不希望去掉扩展名,可以怎样做呢?毕竟我们在修改脚本的时候,编辑器根据扩展名会有语法高亮、语法提示等好处。很简单,我们修改下 Shell 配置即可:

export PATH=$PATH:$HOME/Desktop
alias myscript="myscript.sh"

没错,配置多一个别名即可。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

0 文章
0 评论
23 人气
更多

推荐作者

懂王

文章 0 评论 0

清秋悲枫

文章 0 评论 0

niceone-tech

文章 0 评论 0

小伙你站住

文章 0 评论 0

刘涛

文章 0 评论 0

南街九尾狐

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文