12

私は m4 を使用していくつかの基本的なマクロを作成していますが、使用するとesyscmd、コマンドの実行時に文字列に末尾の改行が追加されることに気付きました。

例:

define(MY_HOSTNAME, esyscmd(`hostname'))
MY_HOSTNAME
Some other text...

レンダリング:

> my.host.name
>
> Some other text...

(末尾に改行を追加)

define (または esyscmd) の最後に追加するdnlと、何も起こらないように見え、末尾に改行がまだ残っています。

esyscmdm4を呼び出すときに末尾の改行を削除する最良の方法は何ですか?

4

4 に答える 4

5

devnull の例は良いですが、M4 にもビルトインがありtrます。これが私がやっていることです:

define(CMD_OUTPUT, esyscmd(`sass --style=compressed foo.sass'))
define(NL,`
')
translit(CMD_OUTPUT, NL)

M4 が少し上手い人なら、それを 1 つのマクロにまとめることができます。

于 2014-03-22T16:29:59.973 に答える
3

*nix システムはtrデフォルトで持っています。それを利用します:

define(MY_HOSTNAME, esyscmd(sh -c "hostname | tr -d '\n'"))

末尾の改行を削除します。

于 2013-12-18T08:16:55.897 に答える
2

代替案は

echo -n `hostname`

パイプはありませんが、バックティックなど、あなたの好みに合ったものは何でも。

于 2014-03-18T11:13:23.750 に答える