sb_pipealign <概要> sb_pipealign : bashスクリプトのパイプ位置を揃える sb_pipealign=shellscript beautifier for pipe alignment <書式> Usage : sb_pipealign < <shellscript> Version : Mon Aug 8 13:28:44 JST 2016 UTF-8 <説明> 標準入力からシェルスクリプトの全体あるいは一部を読み込み、パイプの位置を揃えます。パイプの位置は、自動で設定されます。 <例1> 次のようなスクリプトを読み込ませます。 ---------------------------------------------------- [usp@commands64 BIN]$ cat exp1.sh #!/bin/bash seq 1 5 |\ awk '{print $1,$1*$1}' | awk '{print $1,$2, $2*$1}' | cat > hoge ---------------------------------------------------- [usp@commands64 BIN]$ cat exp1.sh | sb_pipealign #!/bin/bash seq 1 5 |\ awk '{print $1,$1*$1}' |\ awk '{print $1,$2, $2*$1}' |\ cat > hoge ---------------------------------------------------- 最初のパイプのあと、エスケープの記号「\」が記述されていると、以降のパイプの後ろにもエスケープがつきます。 <例2> vimから呼び出すことができます。 スクリプト全体を整形するときはvimの画面で以下のように打ちます。 ---------------------------------------------- |#!/bin/bash | |seq 1 5 | |awk '{print $1,$1*$1}' | |awk '{print $1,$2, $2*$1}' | |cat > hoge | ------------------------------------------------ 行指定で整形することもできます。vimの画面で以下のように打ちます。 ---------------------------------------------- |#!/bin/bash | |seq 1 5 | |awk '{print $1,$1*$1}' | |awk '{print $1,$2, $2*$1}' | |cat > hoge | |:3,5! sb_pipealign ------------------------------------------------ <例3> パイプのない行(awkの折り返しやコメント、その他パイプのない行)は無視されます。 ---------------------------------------------------- [usp@commands64 BIN]$ cat exp2.sh #!/bin/bash seq 1 5 | #1:数字 awk '{print $1,$1*$1}' | #1:数字 2:第一フィールドの二乗 awk '{print $1,$2,\ $2*$1}' | #1:数字 2:第一フィールドの二乗 3:第一フィールドの三乗 cat > hoge ---------------------------------------------------- [hoge@hoge ~]$ cat ./exp2.sh | sb_pipealign #!/bin/bash seq 1 5 | #1:数字 awk '{print $1,$1*$1}' | #1:数字 2:第一フィールドの二乗 awk '{print $1,$2,\ $2*$1}' | #1:数字 2:第一フィールドの二乗 3:第一フィールドの三乗 cat > hoge ---------------------------------------------------- <例4> awkに限らず、オプションが折り返されている場合にも対応しています。ヒアドキュメントにも対応しています。 ---------------------------------------------------- [usp@commands64 BIN]$ cat exp3.sh #!/bin/bash echo 'We | are | pipes | .' | yarr | #上の二行だけ、本物のパイプ cat cat << FIN here | document | FIN ---------------------------------------------------- 本物のパイプだけ揃います。 [usp@commands64 BIN]$ cat exp3.sh | sb_pipealign #!/bin/bash echo 'We | are | pipes | .' | yarr | #上の二行だけ、本物のパイプ cat cat << FIN here | document | FIN ---------------------------------------------------- <バグ> 構文解析を完璧にしているわけではないので、不具合が出ることがあります。 コマンドへのオプションをタブ区切りで指定しているとパイプが揃わないことがあります。 viから呼び出した場合は、エラーのトレース情報でスクリプトが上書きされることがあります。そのような場合はundoしてください。