前端的 Shell 魔法笔记

关闭占用端口的程序

lsof -ti:8080 | xargs -n1 kill -9

读取 package.json 的数据

需要安装jq库解析 json 文件

Github Action 中自带 jq 库,无需安装。

# debian apt install jq # mac brew install jq
# 读取package.json中的name cat package.json | jq -r '.name' # 将package.json中的多个字段拼接成新的字符串 `${name}=${version}` cat package.json | jq -r "'.name' + '=' + '.version'"

给 monorepo 添加 tag

echo $(pnpm -r exec cat package.json | jq -r '.name + "@" + .version') | xargs -n1 git tag

获取本地存在但远程不存在的 Tag

为避免给 monorepo 添加的 tag 已经存在而导致的git push --tags报错。可以过滤掉已存在的 tags 再推送。

changeset tag 也会添加已存在的 tag

REMOTE_TAGS=$(git ls-remote --refs -t | awk '{print $2}' | awk -F '/' '{print $3}') LOCAL_TAGS=$(git tag -l) TAGS_REMOTE_NOT_EXIST=$(echo "$REMOTE_TAGS $REMOTE_TAGS $LOCAL_TAGS" | xargs -n1 | sort | uniq -u) echo $TAGS_REMOTE_NOT_EXIST | xargs -n1 git push origin

载入 dotenv 的环境变量

直接从文件读取

source .env # OR export $(cat .env | xargs)

从 Github Actions 的 inputs 中读取

# 假设我们给`your_action`一个`inputs.variables`参数 runs: steps: - uses: your_actions with: variables: | V1=my_variable1 V2=my_variable2
# 可以这样读取到V1和V2到环境变量中 export $(cat <<EOF | xargs ${{inputs.variables}} EOF ) echo $V1 # my_variable1 echo $V2 # my_variable2