[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
UNIXコマンドをm4
内部から呼び出すための組み込みマクロが
m4
にはいくつか存在します。
12.1 単一のコマンドを実行する | ||
12.2 コマンドの出力を読む | ||
12.3 終了コード | ||
12.4 一時ファイル用の名前を生成 |
syscmd
を使えば任意のシェルコマンドを実行することができます。
syscmd(shell-command) |
シェルコマンドとしてshell-commandを実行します。
syscmd
は展開後、shell-commandからの出力にはならずに
消滅します。shell-commandからの出力やエラーメッセージは
m4
には読み込まれません。
コマンドの出力を処理する必要があるときはSee section コマンドの出力を読むを参照してください。
コマンドの実行に先立ち、m4
は自分の出力バッファをフラッシュします。
shell-commandにおけるデフォルトの標準入力、標準出力、
および標準エラー出力はm4
のものと同じです。
syscmd
は引数を与えたときだけ認識されます。
UNIXコマンドの出力をm4
に読み込ませたいときは
esyscmd
を使ってください。
esyscmd(shell-command) |
このマクロはシェルコマンドshell-commandの標準出力の内容に展開されます。
m4
はコマンドの実行に先立ち自分の出力バッファをフラッシュします。
shell-commandのデフォルトの標準入力および標準エラー出力は
m4
のものと同じになります。
shell-commandのエラー出力は展開テキストの一部にはなりません
― m4
のエラー出力と一緒に出てくるでしょう。
次の例ではGNU m4
ディストリビューションの`checks'ディレクトリ
にいると仮定します。
define(`vice', `esyscmd(grep Vice ../COPYING)') ⇒ vice ⇒ Ty Coon, President of Vice ⇒ |
esyscmd
の展開によるテキストの後ろに改行がついている様子に
注意してください。
esyscmd
は引数を与えたときだけ認識されます。
シェルコマンドの実行が成功したか調べるときは
sysval
を使ってください。
sysval |
このマクロはsyscmd
やesyscmd
で実行した最後のシェルコマンドの
終了ステータス(exit status)に展開されます。
syscmd(`false') ⇒ ifelse(sysval, 0, zero, non-zero) ⇒non-zero syscmd(`true') ⇒ sysval ⇒0 |
syscmd
やesyscmd
に指定されたコマンドが出力やその他の目的で
一時ファイルを必要とすることもあるでしょう。
一時ファイルの名前を生成するために組み込みマクロmaketemp
が用意されています。
maketemp(template) |
このマクロはtemplateを元に作られる、現時点で存在しないファイルの名前に
展開されます。templateは文字列`XXXXXX'で終らなければなりません。
この6つのX
はファイル名をユニークにするためにm4
のプロセスidを含む
何らかの文字列によって置き換えられます。
maketemp(`/tmp/fooXXXXXX') ⇒/tmp/fooa07346 maketemp(`/tmp/fooXXXXXX') ⇒/tmp/fooa07346 |
例にあるようにmaketemp
を複数回呼び出すと同じ文字列に展開されることが
あります。これは選択の基準がファイルが存在するかどうかだからです。
最初のファイルが作成されていないうちに、maketemp
を次に呼び出すと、
2つのmaketemp
マクロの呼び出しは同じ名前に展開される可能性があります。
maketemp
は引数を与えたときだけ認識されます。
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated by Akihiro Sagawa on June, 15 2005 using texi2html 1.70.