繁体   English   中英

在Makefile的linux和MacOS上sed

[英]sed on linux and MacOS in Makefile

我正在编写一个可以在Linux和MacOS系统上工作的Makefile。 我利用sed程序。 事实证明,BSD sed和gnu sed在一个很小但至关重要的细节上有所不同。 我从手册页中引用:

BSD:
-i extension ...

GNU:
-i[SUFFIX], --in-place[=SUFFIX]

所以在Mac上我必须打电话

sed -i '' -e 's/foo/bar/' file.tmp

-i后面的空字符串是必需的,而在Linux机器上,我称之为

sed -i's / foo / bar /'file.tmp

这是问题:

是否有安全的方法来区分Makefile中的两个OS?

我当然可以让用户调用Makefile.macMakefile.linux ,但是我宁愿避免这种情况。

安全的方法是不使用sed-i选项。 此选项是不可移植的扩展,不是POSIX的一部分。

您可以通过使用如下代码完全避免使用-i

sed 's/foo/bar/' file > tmp && mv tmp file

然后它将数据写入tmp文件> tmp
如果未发生错误&&将tmp文件移回原始file

您将在短时间内获得一个临时文件。
我不确定这是否会比-i选项慢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM