Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

m4でシェルコマンドを実行するには"syscmd"

シェルスクリプトで使用する想定なマクロエンジンm4は、必然としてシェルコマンドの内部実行も可能。

実際のところ


目的であるテンプレートエンジン的な使いかた
引数にファイル名をとり、独自コマンドをパイプで渡して、それをcatでキャッチして実行というながれ

まず、HELLOWORLDという関数を作っておき

$ function HELLOWORLD () {  echo -n 1234; }

単純なテキストデータがある状況を想定。

$ cat basetext.txt
Hello, World

先ほどのHELLOWORLD関数の出力をm4でうけ処理してみると、こんな塩梅でHelloが消える

$ HELLOWORLD | m4 -D Hello="syscmd(cat)" basetext.txt
1234, World

応用例:

少し複雑なコマンドも実行できる

syscmd(`date --iso-8601|sed s/-/./g')
2022.07.07