【发布时间】:2015-05-18 15:42:13
【问题描述】:
我正在编写一个可以在 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 中的两个操作系统?
我当然可以让用户致电Makefile.mac 或Makefile.linux,但我宁愿避免这种情况。
【问题讨论】:
-
功能测试
sed命令?运行sed -i ext 's///' <<<input之类的东西,看看它是成功还是错误?我相信这应该在 bsd sed 上成功而在 GNU sed 上失败。
标签: linux macos sed makefile bsd