从m4中删除esyscmd中的尾随换行符

Dan*_*Dan 9 bash shell m4

我正在使用m4创建一些基本的宏,我意识到在使用esyscmd时,在运行命令时会在字符串中添加一个尾随的新行.

例:

define(MY_HOSTNAME, esyscmd(`hostname'))
MY_HOSTNAME
Some other text...
Run Code Online (Sandbox Code Playgroud)

呈现:

> my.host.name
>
> Some other text...
Run Code Online (Sandbox Code Playgroud)

(尾随新行)

通过dnl在define(或esyscmd)的末尾添加似乎没有任何事情发生,并且仍然有一个尾随的换行符.

esyscmd在m4中调用时删除尾随换行符的最佳方法是什么?

jde*_*eno 5

devnull的示例很好,但是M4也具有内置功能tr。这是我在做什么:

define(CMD_OUTPUT, esyscmd(`sass --style=compressed foo.sass'))
define(NL,`
')
translit(CMD_OUTPUT, NL)
Run Code Online (Sandbox Code Playgroud)

使用M4更好的人可以将其收紧到单个宏中。


dev*_*ull 3

*nix 系统tr默认有。利用它:

define(MY_HOSTNAME, esyscmd(sh -c "hostname | tr -d '\n'"))
Run Code Online (Sandbox Code Playgroud)

并且您将摆脱尾随的换行符!