glueutilsについて

Sun Apr 18 13:51:39 JST 2021 (modified: Sun Apr 18 15:01:02 JST 2021)
views: 1146, keywords:glueutils, GlueLang この記事は最終更新日が3年以上前のものです。

この前から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

興味があったら使ってやってください。

ノート   このエントリーをはてなブックマークに追加 
 

prev:日記(2021年4月15日) next:日記(2021年4月19日)

やり散らかし一覧

記事いろいろ