一种保存常用脚本的方式
2021 年 11 月 24 日
背景问题说明
将常用脚本放在一处是个方便的做法,实现方式也很多,但常见的实现方式有以下问题:
- bash 配置中使用 alias / function 等方式,如 .bashrc / .bash_profile 等;这种做法有以下几个问题:
- 脚本会跟已有的文件内容混合,显得混乱
- 修改脚本需要重新加载,调试起来比较麻烦
- 写一个大脚本,将所有的小脚本放进去;这种做法的缺点在于:
- 大脚本想写好的话,比较复杂
- 调试起来不方便
- 将所有脚本放到一个文本文件中,需要的时候从里面拷贝出来;这种做法的缺点在于:
- 使用不便
- 每个小脚本写一个文件,所有小脚本放到一个目录中;这种做法的缺点在于:
- 当脚本数量增多时,记忆这些脚本名称,也成为记忆的负担
- 对于有参数的脚本,需要执行脚本才能看到脚本使用方式
解决方案
有一种较好的方式,可以一次解决上面的问题。具体来说,是利用 just 这个命令行解释器。
实现的关键点,在于按顺序执行以下几个步骤:
- 安装 just ,方法很多,我使用 cargo 安装;这样得到一个可执行的 just 命令
- 将所有脚本放在同一个 justfile 中,放到一个方便访问的位置,比如 ~/ ;作为辅助,可以将默认(第一个) receipt 作为 help,内容包括:
- 打印一些环境变量,
- 通过
--list
打印该 justfile 所包含的 receipt
- 使用alias方式简化 just 的调用命令(比如用
j
),通过--justfile
和--working-directory
指定共用的 justfile 和当前目录
经过以上几步后,能做到以下几点:
- 所有小脚本集中在 ~/justfile 中
- 在任何路径下,通过
j
命令,可以查看共用脚本中的默认 help - 在任何路径下,通过
j
命令,配合参数,可以执行目标脚本 - 使用
just
命令,可以执行当前目录下的just脚本(注意:不是 ~/justfile)
具体范例
Windows环境
Windows7以上使用PowerShell,需要修改下面两个文件:
# %USERPROFILE%\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
Function EXEC_JUST {just --justfile $env:USERPROFILE\justfile --working-directory . $args}
Set-Alias -Name j -Value EXEC_JUST
# %USERPROFILE%\justfile
# pwsh.exe is latest store version of PowerShell
# powershell.exe is windows default version of PowerShell
# cmd.exe is for windows older than XP
set shell := ["pwsh.exe", "-c"]
help:
@Write-Host "Shell='pwsh.exe', Dir='$PWD', Using '$env:USERPROFILE\justfile'"
@just --justfile $env:USERPROFILE\justfile --list
ps-show-version:
Get-Host | Select-Object Version
ps-show-disks:
Get-CimInstance -query "SELECT * from Win32_DiskDrive"
ps-show-env:
dir env:
Ubuntu / WSL2 环境
# ~/.bashrc
alias j='just --justfile ~/justfile --working-directory .'
# ~/justfile
# sh/bash/dash/... is for different Linux
set shell := ["bash", "-c"]
help:
@echo "Shell=$0; Dir=`pwd`; Using ~/justfile"
@just --justfile ~/justfile --list
view-aosp-build-log:
gzip -cd out/verbose.log.gz | less -R
tar destfile srcdir:
tar -cvf {{destfile}} -C {{srcdir}} .
tar-gz destfile srcdir:
tar -cvzf {{destfile}} -C {{srcdir}} .