macOS 上如何写自定义命令行工具?
off999 2025-03-29 20:51 18 浏览 0 评论
大家好,我是前端西瓜哥,今天来说说怎么在 macOS 上写自定义命令行工具。
苹果的 masOS 系统的底层核心是 Darwin 系统。Darwin 是类 Unix 系统,所以我们可以在 masOS 上,像 Linux 一样,执行命令行工具。
我们通常通过第三方安装的命令行工具,比如 node、npm、nginx 等,这很方便。
但,有时候我们想运行自己编写的命令行工具,怎么做呢?
在这之前,我们先了解一些比较基本的恶概念
Shell
对于类 Unix 系统,它有一个 shell 的概念。
Shell 是命令行的输入界面,用户可以在上面输入命令去执行任务。因为它是操作系统底层的一层封装,因此得名为 Shell(壳)。
Shell 本身也是脚本语言,在能运行一些命令行工具的同时,也能进行一些判断、循环之类的逻辑。
Shell 有各种实现,比如最常用的 Bash,它是 Linux 和旧版本的 macOS 的默认版本。
目前 macOS 默认的 Shell 换成了 zsh。zsh 配置比较复杂,我推荐安装 Oh My Zsh,会让你的 zsh 更好用。
脚本保存位置
Shell 怎么知道可以执行的命令行工具,也就是脚本的放在哪里呢?
答案是它会找全局变量 PATH 指定的目录,找到匹配的文件去执行。
我们执行 echo $PATH 就能看到有哪些目录:
$ echo $PATH
/Users/watermelon/.nvm/versions/node/v18.8.0/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin
目录是有多个的,用冒号分隔。会按顺序查询每个目录下的文件,直到找到一个同名的执行它,然后结束。
如果你想要知道某个命令的位置,可以使用 which 命令:
$ which node
/Users/watermelon/.nvm/versions/node/v18.8.0/bin/node
现在我们想写自己的自定义脚本,那么就需要找到一个目录放这些脚本。
我的做法是在用户家目录下创建一个 bin 目录,也就是路径位置 ~/bin。
# 创建 bin 目录
mkdir ~/bin
然后给 PATH 变量新增一个路径,我们需要在 ~/.zshrc 文件加上:
export PATH=~/bin:$PATH
这样,每次打开终端时,PATH 路径都会执行 .zshrc 文件,然后给 PATH 变量加上 ~/bin 路径。
自定义脚本
然后我们就可以在 bin 目录下写自己的脚本。
你可以写名为 hello 的 sh 脚本:
#!/bin/sh
echo Hello!
也可以写一个名为 hi 的 nodejs 脚本:
#!/usr/bin/env node
console.log('Hi!')
我们通过第一行带有 #! (称为 shebang)的注释来指定编译器。然后下面的几行就是对应语言的脚本。
然后记得给这些脚本的属性设置为可执行,否则会报权限否认的错误。
chmod u+x hello
chmod u+x hi
看看效果:
下面就可以根据自己需要做写一些脚本了。
想要在 VS Code 下集成的终端打开独立的 iterm2 窗口,我们的一个方式是:
open . -a iTerm .
很长,我们可以写一个名为 iterm 的脚本:
open . -a iTerm ${1:-.}
${1:-.} 代表取第一个参数,如果没有,就实用默认值 .。另外把第一行的注释也省略掉了,默认会作为 shell 脚本执行。
这样我执行 iterm 就能打开独立 iterm2 窗口
或者你可以用 github 做一些文章备份,我写了一个 artcle-push 脚本:
cd ~/Documents/articles
git add .
arg1=${1:-update}
git commit -m $arg1
git push
该脚本可以某个目录的文件进行 commit,然后提交到 Github,且支持指定 commit 信息。
当你写了新的内容,想备份的时候,输入 artcle-push 就可以了,非常方便。
结尾
想要提高效率吗?那你需要做自动化或半自动化,把一些重复的工作交给计算机,赶紧来写你的自定义脚本吧。
我是前端西瓜哥,欢迎关注我,学习更多前端知识。
相关推荐
- 每天一个 Python 库:datetime 模块全攻略,时间操作太丝滑!
-
在日常开发中,时间处理是绕不开的一块,比如:生成时间戳比较两个时间差转换为可读格式接口传参/前端展示/日志记录今天我们就用一个案例+代码+思维导图,带你完全搞定datetime模块的用法!...
- 字节跳动!2023全套Python入门笔记合集
-
学完python出来,已经工作3年啦,最近有很多小伙伴问我,学习python有什么用其实能做的有很多可以提高工作效率增强逻辑思维还能做爬虫网站数据分析等等!!最近也是整理了很多适合零基...
- 为什么你觉得Matplotlib用起来困难?因为你还没看过这个思维导图
-
前言Matplotlib是一个流行的Python库,可以很容易地用于创建数据可视化。然而,设置数据、参数、图形和绘图在每次执行新项目时都可能变得非常混乱和繁琐。而且由于应用不同,我们不知道选择哪一个图...
- Python新手必看!30分钟搞懂break/continue(附5个实战案例)
-
一、跳转语句的使命当程序需要提前结束循环或跳过特定迭代时,break和continue就是你的代码急刹按钮和跳步指令。就像在迷宫探险中:break=发现出口立即离开continue=跳过陷阱继续前进二...
- 刘心向学(24)Python中的数据类(python中5种简单的数据类型)
-
分享兴趣,传播快乐,增长见闻,留下美好!亲爱的您,这里是LearningYard新学苑。今天小编为大家带来文章“刘心向学(24)Python中的数据类”欢迎您的访问。Shareinterest,...
- 刘心向学(25)Python中的虚拟环境(python虚拟环境安装和配置)
-
分享兴趣,传播快乐,增长见闻,留下美好!亲爱的您,这里是LearningYard新学苑。今天小编为大家带来文章“刘心向学(25)Python中的虚拟环境”欢迎您的访问。Shareinte...
- 栋察宇宙(八):Python 中的 wordcloud 库学习介绍
-
分享乐趣,传播快乐,增长见识,留下美好。亲爱的您,这里是LearingYard学苑!今天小编为大家带来“Python中的wordcloud库学习介绍”欢迎您的访问!Sharethefun,...
- AI在用|ChatGPT、Claude 3助攻,1分钟GET高颜值思维导图
-
机器之能报道编辑:Cardinal以大模型、AIGC为代表的人工智能浪潮已经在悄然改变着我们生活及工作方式,但绝大部分人依然不知道该如何使用。因此,我们推出了「AI在用」专栏,通过直观、有趣且简洁的人...
- 使用DeepSeek + Python开发AI思维导图应用,非常强!
-
最近基于Deepseek+PythonWeb技术开发了一个AI对话自动生成思维导图的应用,用来展示下如何基于低门槛的Python相关技术栈,高效结合deepseek实现从应用场景到实际应用的快速落地...
- 10幅思维导图告诉你 - Python 核心知识体系
-
首先,按顺序依次展示了以下内容的一系列思维导图:基础知识,数据类型(数字,字符串,列表,元组,字典,集合),条件&循环,文件对象,错误&异常,函数,模块,面向对象编程;接着,结合这些思维导图主要参考的...
- Python基础核心思维导图,让你轻松入门
-
Python基础核心思维导图【高清图文末获取】学习路线图就给大家看到这里了,需要的小伙伴下方获取获取方式看下方图片...
- Python基础核心思维导图,学会事半功倍
-
Python基础核心思维导图【高清图文末获取】学习路线图就给大家看到这里了,需要的小伙伴下方获取获取方式看下方图片...
- 硬核!288页Python核心知识笔记(附思维导图,建议收藏)
-
今天就给大家分享一份288页Python核心知识笔记,相较于部分朋友乱糟糟的笔记,这份笔记更够系统地总结相关知识,巩固Python知识体系。文末获取完整版PDF该笔记学习思维导图:目录内容展示【领取方...
- Python学习知识思维导图(高效学习)
-
Python学习知识思维导图python基础知识python数据类型条件循环列表元组字典集合字符串序列函数面向对象编程模块错误异常文件对象#python##python自学##编程#...
- 别找了!288页Python核心知识笔记(附思维导图,建议收藏)
-
今天就给大家分享一份288页Python核心知识笔记,相较于部分朋友乱糟糟的笔记,这份笔记更够系统地总结相关知识,巩固Python知识体系。文末获取完整版PDF该笔记学习思维导图:目录内容展示【领取方...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- 每天一个 Python 库:datetime 模块全攻略,时间操作太丝滑!
- 字节跳动!2023全套Python入门笔记合集
- 为什么你觉得Matplotlib用起来困难?因为你还没看过这个思维导图
- Python新手必看!30分钟搞懂break/continue(附5个实战案例)
- 刘心向学(24)Python中的数据类(python中5种简单的数据类型)
- 刘心向学(25)Python中的虚拟环境(python虚拟环境安装和配置)
- 栋察宇宙(八):Python 中的 wordcloud 库学习介绍
- AI在用|ChatGPT、Claude 3助攻,1分钟GET高颜值思维导图
- 使用DeepSeek + Python开发AI思维导图应用,非常强!
- 10幅思维导图告诉你 - Python 核心知识体系
- 标签列表
-
- python计时 (54)
- python安装路径 (54)
- python类型转换 (75)
- python进度条 (54)
- python的for循环 (56)
- python串口编程 (60)
- python写入txt (51)
- python读取文件夹下所有文件 (59)
- java调用python脚本 (56)
- python操作mysql数据库 (66)
- python字典增加键值对 (53)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python qt (52)
- python人脸识别 (54)
- python斐波那契数列 (51)
- python多态 (60)
- python命令行参数 (53)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- centos7安装python (53)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)