Bash脚本执行时跳过部分代码行的问题排查求助
问题分析与解决
1. zoxide、Vim插件步骤未执行的核心原因
从bash -x输出能看到,fzf安装完成后直接跳到了切换shell的步骤,中间代码完全没执行——这是因为fzf的默认安装脚本在检测到zsh存在时,会自动执行exec zsh替换当前bash进程,导致后续脚本代码被直接终止。
解决方法
给fzf安装命令添加参数,跳过自动切换shell的逻辑,仅完成核心安装:
~/.fzf/install --no-update-rc --key-bindings --completion --no-bash --no-fish
参数说明:
--no-update-rc:不自动修改shell配置文件(由yadm管理的dotfiles统一配置)--key-bindings --completion:保留fzf的快捷键和补全功能--no-bash --no-fish:仅针对zsh配置,避免冗余操作
2. yadm克隆失败后后续命令仍执行的问题
默认bash脚本不会因单个命令失败终止,所以yadm clone报错后,后续的yadm config、sparse-checkout reapply仍会执行,可能引发无效操作。
解决方法
两种可选方案:
方案一:命令级串联校验
用&&串联yadm相关命令,确保前一步成功才执行后一步:
~/.local/bin/yadm clone https://github.com/ferdinandyb/dotfiles.git && \ ~/.local/bin/yadm config --add local.class minimal && \ ~/.local/bin/yadm sparse-checkout reapply
方案二:全局错误终止
在脚本开头添加set -e,让脚本遇到任何命令失败时立即终止(适合严格的自动化场景):
#!/bin/bash set -e echo -e "\033[1mrunning minimal bootstrap\033[0m" # 后续脚本内容...
额外优化建议
- Vim插件安装:确保yadm已克隆
plug.vim到~/.vim/autoload/目录,否则vim +PlugUpdate +qall会报错;可添加非交互式执行的额外参数避免异常:vim -E -s +PlugUpdate +qall - zoxide安装:添加
--no-interactive参数避免潜在的交互阻塞:curl -sS https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh | bash -s -- --no-interactive
内容的提问来源于stack exchange,提问作者fbence
相关产品推荐
相关产品推荐

