根本原因是notepad++调用cmd执行后窗口立即退出,解决方法是在命令末尾加& pause或改用cmd /k保留窗口,同时确保路径加引号、换行符为lf、编码设为utf-8无bom。

Notepad++运行Shell脚本时输出窗口一闪而过怎么办
根本原因是 Notepad++ 调用的是 Windows cmd,执行完命令立刻退出,没驻留终端。不是脚本没跑,是窗口关太快。
- 最直接解法:在命令末尾加
& pause,例如:cmd /c chcp 65001 >nul && bash "$(FULL_CURRENT_PATH)" & pause - 更干净的做法:用
cmd /k替代cmd /c,/k会保留窗口(适合调试),/c适合一键执行后自动关闭 - 如果用了 Cygwin 或 WSL 的
bash.exe,确保路径里没空格;有空格必须用双引号包裹完整路径,比如:"C:\cygwin64\bin\bash.exe" "$(FULL_CURRENT_PATH)" - NppExec 用户可启用内置控制台:
npp_console 1 | bash "$(FULL_CURRENT_PATH)",避免弹新窗口
中文输出乱码或 $'\r': command not found 错误
这两个问题常同时出现,但根源不同:前者是控制台编码错位,后者是换行符不兼容。
-
$'\r': command not found表明脚本用了 Windows 换行符(CRLF),Linux 环境只认 LF。解决方法:菜单栏 → 编辑 → 行操作 → 转换行尾符为 UNIX 格式(LF),或快捷键Ctrl+Shift+U - 中文乱码主因是 Windows 控制台默认 GBK 编码,而脚本保存为 UTF-8。强制切编码:
cmd /c chcp 65001 >nul && bash "$(FULL_CURRENT_PATH)"——chcp 65001切到 UTF-8 代码页,>nul屏蔽提示行 - Notepad++ 新建文件默认编码建议设为「UTF-8 无 BOM」:设置 → 首选项 → 新建 → 编码选 UTF-8(无 BOM)
- 别依赖文件头声明
# -*- coding: utf-8 -*-,Shell 不认这个,它只看实际字节和终端编码
路径含空格或中文时 bash 报“找不到文件”
Notepad++ 的 $(FULL_CURRENT_PATH) 变量本身不含引号,遇到空格会被 cmd 当作多个参数拆分。
- 必须用英文双引号包裹整个变量:
"$(FULL_CURRENT_PATH)",不能写成$(FULL_CURRENT_PATH)或'$(FULL_CURRENT_PATH)'(单引号在 cmd 里无效) - 如果你调用的是 Cygwin 的
bash.exe,它的路径也得加引号:"C:\cygwin64\bin\bash.exe" "$(FULL_CURRENT_PATH)" - 中文路径虽能工作,但容易触发编码边界问题。真要支持,确保 Notepad++ 和 Cygwin 都用 UTF-8,且脚本已转为 LF 换行
- 别用
$(FILE_NAME)或$(NAME_PART)——它们不含目录,source ./lib.sh会失败
如何让 Shell 脚本在当前目录下正确执行
Windows 下启动的 bash 默认工作目录是用户 home,不是脚本所在目录,./xxx.sh 或 source config.env 全部失效。
- 显式切换目录:
cmd /c chcp 65001 >nul && cd "$(CURRENT_DIRECTORY)" && bash "$(FULL_CURRENT_PATH)" - Cygwin 用户可用
cygpath转换路径:cmd /c chcp 65001 >nul && "C:\cygwin64\bin\bash.exe" -c "cd $(cygpath -u '$(CURRENT_DIRECTORY)'); . '$(FULL_CURRENT_PATH)'" - WSL 用户推荐用
wsl -e bash -c方式,避免 Cygwin 兼容层干扰,但需确保 WSL 已安装并默认发行版就绪 - 如果脚本里写了
#!/bin/bash,确保第一行无 BOM、无空白字符,否则解释器可能跳过 shebang
复杂点不在配置本身,而在路径、编码、换行符三者叠加时的隐性冲突。改完任何一项,都得重启 Notepad++ 才能刷新环境变量和缓存设置。











