一站式脚本管理神器:Pier,让你的命令行生活更高效!
前言
在数字时代,效率是王道。对于Linux用户来说,终端是他们的第二家园。但随着时间的积累,那些宝贵的一行代码、脚本和工具往往被埋没在杂乱无章的文件夹中。现在,有了 Pier,这一切都将改变。这不仅仅是一个工具,它是你命令行生活的得力助手,让管理变得简单而优雅。
一个集中的仓库,用于管理你所有的一行代码、脚本、工具和命令行界面。添加、删除、列出和运行脚本 - 存储元数据以便稍后轻松找到它们。不再需要在你的 bin
文件夹中翻找...
描述
如果你在终端中花费了任何时间,毫无疑问你已经积累了一堆一行代码、脚本、有用的工具和命令行界面。每当你想使用它们时,你都会在你的 bin
文件夹中翻找,试图记住你是如何命名脚本的... Linux 用户喜欢难以记住的命名约定。
脚本应该是一等公民。在 GUI 世界中,我们可以通过某种菜单找到我们的程序。在终端中,脚本会丢失。
pier
的理念是为你的所有脚本创建一个中央仓库,并提供一种附加这些脚本元数据的方法。使用 pier
,你可以添加、删除、列出和运行脚本。这些可以通过 pier
在可读的 TOML 配置中进行管理,或者你可以使用它来编目你周围可能已有的现有脚本 - 然后你只需为特定脚本添加元数据,并将其附加到 PATH
中的名称。
安装
从 Crates.io: cargo install pier
从 GitHub 版本: 只需下载发布二进制文件
使用 Nix 包管理器:
从 GitHub 版本: make install
或nix-env -if derivation.nix
从源代码: 更新派生中的 src
到./.
最近的重大变更
版本 0.1.4
:
配置变量 default_interpreter
已被 移除:
default_interpreter = ["foorunner", "-c"]
因此,当你从早期版本升级到 0.1.4
时,你需要改为以这种格式指定变量:
[default]
interpreter = ["foorunner", "-c"]
操作
使用 pier --help
显示命令行帮助,或查看 src/cli.rs
以获取更详细的规范。
pier 0.1.4
Benjamin Scholtz, Isak Johansson
一个简单的脚本管理命令行界面
用法:
pier [标志] [选项] <别名>
pier [标志] [选项] <子命令>
标志:
-h, --help
打印帮助信息
-V, --version
打印版本信息
-v, --verbose
详细程度
选项:
-c, --config-file <路径>
设置自定义配置文件。
默认路径按以下顺序确定:
- $PIER_CONFIG_PATH (如果设置环境变量)
- pier.toml (在当前目录中)
- $XDG_CONFIG_HOME/pier/config.toml
- $XDG_CONFIG_HOME/pier/config
- $XDG_CONFIG_HOME/pier.toml
- $HOME/.pier.toml
- $HOME/.pier
[环境变量: PIER_CONFIG_PATH=]
参数:
<别名>
脚本的别名或名称。
子命令:
add 将新脚本添加到配置中。
edit 编辑与别名匹配的脚本。
help 打印此消息或给定子命令的帮助
list 别名:ls - 列出脚本
remove 别名:rm - 删除与别名匹配的脚本。
run 运行与别名匹配的脚本。
show 显示与别名匹配的脚本。
pier list
pier add "ip link set wlp58s0 down && sleep 5 && ip link set wlp58s0 up" --alias refresh-wifi
pier refresh-wifi
pier
TOML 配置 示例
[scripts.refresh-wifi]
command = "ip link set wlp58s0 down && sleep 5 && ip link set wlp58s0 up"
[scripts.twa-analyze]
command = "docker run --rm -t trailofbits/twa -vw"
tags = [ "infosec" ]
[scripts.enabled-services]
command = "systemctl list-unit-files --state=enabled"
[scripts.flush-docker]
command = "docker container stop $(docker container ls -a -q) && docker system prune -a -f --volumes"
description = "一个清除旧 Docker 容器和镜像的脚本"
tags = [ "docker", "flush" ]
pier list
输出 示例
▶ pier list
别名 | 命令
-------------------+----------------------------------------------------------------------------------------------------------------
fromscratch | appimage-run ~/AppImage/FromScratch.1.4.3.AppImage
nspawn-bionic | sudo systemd-nspawn --bind=/tmp/.X11-unix -D /var/lib/machines/bionic --bind /home/bscholtz:/home/bscholtz
bspwm-refresh | .config/bspwm/bspwmrc
flush-docker | docker container stop $(docker container ls -a -q) && docker system prune -a -f --volumes
zfs-compression | sudo zfs get all | grep compressratio
mongo-docker | docker run --name mongodb -d mongo:latest
forward-mongo | kubectl port-forward mongo-molecule-set-0 27018:27017
refresh-wifi | ip link set wlp58s0 down && sleep 5 && ip link set wlp58s0 up
lepton | appimage-run ~/AppImage/Lepton-1.8.0-x86_64.AppImage
ledger | appimage-run AppImage/ledger-live-desktop-1.6.0-linux-x86_64.AppImage
reload-urxvt | xrdb ~/.Xresources
kill-docker | rm -rf /var/lib/docker
reload-xresources | xrdb ~/.Xresources
graphiql | appimage-run ~/AppImage/graphiql-app-0.7.2-x86_64.AppImage
enabled-services | systemctl list-unit-files --state=enabled
ports | netstat -tulpn
chmod-copy | chmod --reference=
zfs-drop-caches | sync; echo 2 | sudo tee /proc/sys/vm/drop_caches
update | sudo nix-channel --update && sudo nixos-rebuild switch
flush-untagged | docker images -q --filter dangling=true | xargs -r docker rmi
twa-analyze | docker run --rm -t trailofbits/twa -vw
parity-ubuntu | docker image pull yodascholtz/parity-ubuntu:latest && docker run -p 8545:8545 yodascholtz/parity-ubuntu:latest
在任何解释性语言中执行 pier 脚本
以 shebang #!
开头的脚本将使用指定的解释器运行,就像在普通脚本中一样。Pier 通过从你的脚本创建一个临时文件,执行它,然后清理文件来实现这一点。这允许你用 python、node.js 等编写你的 pier 脚本,甚至可以使用 scriptisto 运行编译语言。
Shebang 示例配置
[scripts.run_rust_script]
command = '''
#!/usr/bin/env scriptisto
// scriptisto-begin
// script_src: src/main.rs
// build_cmd: cargo build --release && strip ./target/release/script
// target_bin: ./target/release/script
// files:
// - path: Cargo.toml
// content: |
// package = { name = "script", version = "0.1.0", edition = "2018"}
// [dependencies]
// scriptisto-end
fn main() {
println!("This is a rust script!");
}
'''
[scripts.run_python]
command = '''
#!/usr/bin/env python3
import sys
print("Running python with version {}".format(sys.version))
'''
设置默认的 shell / 解释器
默认情况下,如果没有指定 shebang,pier 将尝试使用你的默认 shell 来内联执行脚本。这可以通过解释器变量覆盖。它需要是一个列表,列表中的第一个项是二进制文件,其余的是任何必要的标志。
默认解释器示例配置
# 设置默认解释器,列表中的第一个项应该是二进制文件,其余的是解释器 cli 选项的参数。
[default]
interpreter = ["node", "-e"]
# 作为回退解释器运行 nodejs,因为它缺少 shebang
[scripts.hello_world_nodejs]
command = '''
console.log("Hello world!")
'''
#这将作为 posix sh 脚本运行,因为它有 shebang
[scripts.a_shell_script]
command = '''
#!/bin/sh
nohup st > /dev/null 2>&1&
'''
结语
Pier 不仅仅是一个脚本管理工具,它是一个革命性的解决方案,旨在简化你的工作流程,提升你的生产力。无论你是开发者、系统管理员还是普通用户,Pier 都能成为你不可或缺的伙伴。加入 Pier 的行列,开启你的高效命令行之旅!