新聞中心
大家好,我是前端西瓜哥,今天來(lái)說(shuō)說(shuō)怎么在 macOS 上寫(xiě)自定義命令行工具。

蘋(píng)果的 masOS 系統(tǒng)的底層核心是 Darwin 系統(tǒng)。Darwin 是類 Unix 系統(tǒng),所以我們可以在 masOS 上,像 Linux 一樣,執(zhí)行命令行工具。
我們通常通過(guò)第三方安裝的命令行工具,比如 node、npm、nginx 等,這很方便。
但,有時(shí)候我們想運(yùn)行自己編寫(xiě)的命令行工具,怎么做呢?
在這之前,我們先了解一些比較基本的惡概念
Shell
對(duì)于類 Unix 系統(tǒng),它有一個(gè) shell 的概念。
Shell 是命令行的輸入界面,用戶可以在上面輸入命令去執(zhí)行任務(wù)。因?yàn)樗遣僮飨到y(tǒng)底層的一層封裝,因此得名為 Shell(殼)。
Shell 本身也是腳本語(yǔ)言,在能運(yùn)行一些命令行工具的同時(shí),也能進(jìn)行一些判斷、循環(huán)之類的邏輯。
Shell 有各種實(shí)現(xiàn),比如最常用的 Bash,它是 Linux 和舊版本的 macOS 的默認(rèn)版本。
目前 macOS 默認(rèn)的 Shell 換成了 zsh。zsh 配置比較復(fù)雜,我推薦安裝 Oh My Zsh,會(huì)讓你的 zsh 更好用。
腳本保存位置
Shell 怎么知道可以執(zhí)行的命令行工具,也就是腳本的放在哪里呢?
答案是它會(huì)找全局變量 PATH 指定的目錄,找到匹配的文件去執(zhí)行。
我們執(zhí)行 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
目錄是有多個(gè)的,用冒號(hào)分隔。會(huì)按順序查詢每個(gè)目錄下的文件,直到找到一個(gè)同名的執(zhí)行它,然后結(jié)束。
如果你想要知道某個(gè)命令的位置,可以使用 which 命令:
$ which node
/Users/watermelon/.nvm/versions/node/v18.8.0/bin/node
現(xiàn)在我們想寫(xiě)自己的自定義腳本,那么就需要找到一個(gè)目錄放這些腳本。
我的做法是在用戶家目錄下創(chuàng)建一個(gè) bin 目錄,也就是路徑位置 ~/bin。
mkdir ~/bin
然后給 PATH 變量新增一個(gè)路徑,我們需要在 ~/.zshrc 文件加上:
export PATH=~/bin:$PATH
這樣,每次打開(kāi)終端時(shí),PATH 路徑都會(huì)執(zhí)行 .zshrc 文件,然后給 PATH 變量加上 ~/bin 路徑。
自定義腳本
然后我們就可以在 bin 目錄下寫(xiě)自己的腳本。
你可以寫(xiě)名為 hello 的 sh 腳本:
#!/bin/sh
echo Hello!
也可以寫(xiě)一個(gè)名為 hi 的 nodejs 腳本:
#!/usr/bin/env node
console.log('Hi!')
我們通過(guò)第一行帶有 #! (稱為 shebang)的注釋來(lái)指定編譯器。然后下面的幾行就是對(duì)應(yīng)語(yǔ)言的腳本。
然后記得給這些腳本的屬性設(shè)置為可執(zhí)行,否則會(huì)報(bào)權(quán)限否認(rèn)的錯(cuò)誤。
chmod u+x hello
chmod u+x hi
看看效果:
下面就可以根據(jù)自己需要做寫(xiě)一些腳本了。
想要在 VS Code 下集成的終端打開(kāi)獨(dú)立的 iterm2 窗口,我們的一個(gè)方式是:
open . -a iTerm .
很長(zhǎng),我們可以寫(xiě)一個(gè)名為 iterm 的腳本:
open . -a iTerm ${1:-.}${1:-.} 代表取第一個(gè)參數(shù),如果沒(méi)有,就實(shí)用默認(rèn)值 .。另外把第一行的注釋也省略掉了,默認(rèn)會(huì)作為 shell 腳本執(zhí)行。
這樣我執(zhí)行 iterm 就能打開(kāi)獨(dú)立 iterm2 窗口。
或者你可以用 github 做一些文章備份,我寫(xiě)了一個(gè) artcle-push 腳本:
cd ~/Documents/articles
git add .
arg1=${1:-update}
git commit -m $arg1
git push
該腳本可以某個(gè)目錄的文件進(jìn)行 commit,然后提交到 Github,且支持指定 commit 信息。
當(dāng)你寫(xiě)了新的內(nèi)容,想備份的時(shí)候,輸入 artcle-push 就可以了,非常方便。
結(jié)尾
想要提高效率嗎?那你需要做自動(dòng)化或半自動(dòng)化,把一些重復(fù)的工作交給計(jì)算機(jī),趕緊來(lái)寫(xiě)你的自定義腳本吧。
新聞標(biāo)題:macOS上如何寫(xiě)自定義命令行工具?
分享地址:http://fisionsoft.com.cn/article/cdehges.html


咨詢
建站咨詢
