这是为我的安装回购,我使用在新的linux安装和公司提供的macbooks。我有个makefile目标:
omz-theme:
sed -i 's/ZSH_THEME=".*"/ZSH_THEME="$(THEME)"/g' $(HOME)/.zshrc这在linux上运行得很好,但在macs上却不起作用,因为它们使用的是BSD的sed。我需要一些方法来查找和替换我的.zshrc中将运行的文本,而不管系统如何。几乎所有在线资源都只指向sed。
编辑:这就是它在mac上“崩溃”的方式。如果我执行brew install gnu-sed并将目标更改为使用gsed,则不会发生
sed: 1: "/Users/username/.zshrc": unterminated substitute pattern发布于 2022-05-20 18:42:04
您也可以使用awk查找和替换。这是一个包含更多细节的资源。。
例如,可以将makefile命令替换为:
omz-theme:
awk -v var="ZSH_THEME=$(echo THEME)" '{sub(/^ZSH_THEME=.*$/, var); print}' $(HOME)/.zshrc您可以使用它来重写现有的$(HOME)/.zshrc文件,使用重定向:
omz-theme:
awk -v var="ZSH_THEME=$(echo THEME)" '{sub(/^ZSH_THEME=.*$/, var); print}' $(HOME)/.zshrc > $(HOME)/.zshrc或者,您可以使用检查操作系统使用 OSTYPE,然后对BSD和GNU使用正确的sed语法:
omz-theme:
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
sed -i 's/ZSH_THEME=".*"/ZSH_THEME="$(THEME)"/g' $(HOME)/.zshrc
else
sed -i '' 's/ZSH_THEME=".*"/ZSH_THEME="$(THEME)"/g' $(HOME)/.zshrc
fi(注:我没有测试上面的内容,但你明白了)
https://stackoverflow.com/questions/72301652
复制相似问题