前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >macOS 上如何写自定义命令行工具?

macOS 上如何写自定义命令行工具?

作者头像
前端西瓜哥
发布2022-12-21 19:49:23
6600
发布2022-12-21 19:49:23
举报
文章被收录于专栏:前端西瓜哥的前端文章

大家好,我是前端西瓜哥,今天来说说怎么在 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 就能看到有哪些目录:

代码语言:javascript
复制
$ 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 命令:

代码语言:javascript
复制
$ which node
/Users/watermelon/.nvm/versions/node/v18.8.0/bin/node

现在我们想写自己的自定义脚本,那么就需要找到一个目录放这些脚本。

我的做法是在用户家目录下创建一个 bin 目录,也就是路径位置 ~/bin

代码语言:javascript
复制
# 创建 bin 目录
mkdir ~/bin

然后给 PATH 变量新增一个路径,我们需要在 ~/.zshrc 文件加上:

代码语言:javascript
复制
export PATH=~/bin:$PATH

这样,每次打开终端时,PATH 路径都会执行 .zshrc 文件,然后给 PATH 变量加上 ~/bin 路径。

自定义脚本

然后我们就可以在 bin 目录下写自己的脚本。

你可以写名为 hello 的 sh 脚本:

代码语言:javascript
复制
#!/bin/sh
echo Hello!

也可以写一个名为 hi 的 nodejs 脚本:

代码语言:javascript
复制
#!/usr/bin/env node
console.log('Hi!')

我们通过第一行带有 #! (称为 shebang)的注释来指定编译器。然后下面的几行就是对应语言的脚本。

然后记得给这些脚本的属性设置为可执行,否则会报权限否认的错误。

代码语言:javascript
复制
chmod u+x hello
chmod u+x hi

看看效果:

下面就可以根据自己需要做写一些脚本了。

想要在 VS Code 下集成的终端打开独立的 iterm2 窗口,我们的一个方式是:

代码语言:javascript
复制
open . -a iTerm .

很长,我们可以写一个名为 iterm 的脚本:

代码语言:javascript
复制
open . -a iTerm ${1:-.}

${1:-.} 代表取第一个参数,如果没有,就实用默认值 .。另外把第一行的注释也省略掉了,默认会作为 shell 脚本执行。

这样我执行 iterm 就能打开独立 iterm2 窗口

或者你可以用 github 做一些文章备份,我写了一个 artcle-push 脚本:

代码语言:javascript
复制
cd ~/Documents/articles
git add .
arg1=${1:-update}
git commit -m $arg1
git push

该脚本可以某个目录的文件进行 commit,然后提交到 Github,且支持指定 commit 信息。

当你写了新的内容,想备份的时候,输入 artcle-push 就可以了,非常方便。

结尾

想要提高效率吗?那你需要做自动化或半自动化,把一些重复的工作交给计算机,赶紧来写你的自定义脚本吧。

我是前端西瓜哥,欢迎关注我,学习更多前端知识。


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端西瓜哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Shell
  • 脚本保存位置
  • 自定义脚本
  • 结尾
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档