如何让 Shell 脚本全局执行
碰巧前面一篇文章中浅浅介绍了一下 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 技术交流群。
上一篇: Shell 脚本学习
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论