glueutilsについて
Sun Apr 18 13:51:39 JST 2021 (modified: Sun Apr 18 15:01:02 JST 2021)
views: 1530, keywords:glueutils, GlueLang この記事は最終更新日が4年以上前のものです。
この前からglueutilsという怪しげなコマンドパッケージを作っているのですが、解説を書いておこうと思います。
なんのためのパッケージか
標準入出力のリダイレクトなど、シェルでやるような処理をコマンドだけで可能にするためのパッケージ群です。
なにが嬉しいか
正直ニッチすぎるのですが、
- リダイレクト処理が貧弱なシェル(私の作ってるGlueLangなど)でもリダイレクトが可能(もともとこの用途で作成してます。)
- シェルで
2>&1とか> /dev/nullとかリダイレクトを書くとゴチャゴチャすると感じることがないことはないので、ゴチャゴチャしない方法を提供
というところでしょうか。リダイレクト処理はシェルの主要な役割のひとつですが、コマンドでもできるから、そういうコマンド集があってもいいから用意しているという感じです。
使用例
コマンドは、いまのところ次のようなものがあります。
| コマンド | 働き |
|---|---|
| flip12 | 標準出力と標準エラー出力を入れ替え |
| log2 | 標準エラー出力をファイルにリダイレクト |
| ign1 | 標準出力を/dev/nullへ |
| ign2 | 標準エラー出力を/dev/nullへ |
| ign12 | 標準出力、標準エラー出力を/dev/nullへ |
| ignerr | 終了ステータスを常に0に |
これらのコマンドに、引数として任意のコマンドを指定して使います。
例1: 標準出力を無視
diffの出力を捨てて終了ステータスだけ取る。
$ ign1 diff /etc/passwd /etc/group
$ echo $?
1
例2: diffの終了ステータスを無視
シェルで-eオプション(エラーが起こると止める)などを設定したときに止まらないようにできます。
$ ignerr diff /etc/passwd /etc/group > file
$ echo $?
0
### ignerrを使わない場合 ###
$ diff /etc/passwd /etc/group > file || true
$ echo $?
0
例3: 標準エラー出力をファイルに保存
time(bashのビルトインコマンド)の出力をhogeというファイルに保存。
$ log2 hoge bash -c 'time ls'
hoge main.md
$ cat hoge
real 0m0.001s
user 0m0.001s
sys 0m0.000s
例4: 標準エラー出力をパイプに流す
ign1 strace ls(標準出力を捨てたstrace)の標準エラー出力をflip12で標準出力に切り替え。
$ flip12 ign1 strace ls | grep -o '0x[0-9a-f]*' | head -n 3
0x7ffca9896b80
0x56043ed79000
0x3001
興味があったら使ってやってください。
ノート
Tweet