diff --git a/init_priv.sh b/init_priv.sh index e23be00..f049d2c 100755 --- a/init_priv.sh +++ b/init_priv.sh @@ -127,21 +127,6 @@ configure_vim() { fi } -replace_zsh_source() { - local zshrc="$HOME/.zshrc" - local old_source="\$ZSH/oh-my-zsh.sh" - local new_source="~/.oh-my-zsh/custom/00-init.zsh" - - # 使用 sed 进行替换,注意 macOS 和 Linux 的 sed 语法稍有不同 - if [ "$(uname)" = "Darwin" ]; then - # macOS 使用的是 BSD sed,需要给 -i 选项传递一个空字符串作为扩展名 - sed -i '' "s|${old_source}|${new_source}|g" "$zshrc" - else - # Linux 使用的是 GNU sed - sed -i "s|${old_source}|${new_source}|g" "$zshrc" - fi -} - configure_zsh() { [ -f ~/.zshrc ] && return @@ -158,7 +143,20 @@ configure_zsh() { pkg_install autojump if ! grep -Fxq "source ~/.oh-my-zsh/custom/00-init.zsh" ~/.zshrc; then - replace_zsh_source + local zshrc="$HOME/.zshrc" + local search_line="source \$ZSH/oh-my-zsh.sh" + local add_line="source ~/.oh-my-zsh/custom/00-init.zsh" + + if [ "$(uname)" = "Darwin" ]; then + # macOS + awk -v search="$search_line" -v add="$add_line" '{ + if (index($0, search) > 0) print add + print $0 + }' "$zshrc" > ~/.zshrc.temp && mv ~/.zshrc.temp "$zshrc" + else + # Linux + sed -i "/${search_line}/i ${add_line}" "$zshrc" + fi fi cp $scriptdir/files/zsh/.zsh_user ~/.zsh_user