Windows下Shell脚本检测并终止进程的报错问题求助
解决Windows下Shell脚本检测并终止进程的报错问题
你的测试脚本报错核心原因有两个:
- 错误地将命令字符串直接传给
[ -z ]判断,而非执行命令获取输出结果 [ echo "Empty" ]是无效语法,[(test命令)不支持这种写法
下面针对不同运行环境给出正确实现:
一、Windows CMD脚本(.bat/.cmd)
CMD环境下可直接利用findstr的退出码判断:找到进程时退出码为0,未找到为1
@echo off :: 执行检测命令,将输出重定向到nul避免显示冗余结果 tasklist | findstr /I "notepad++.exe" >nul if %errorlevel% equ 0 ( echo 进程正在运行,将终止它 taskkill /F /IM notepad++.exe ) else ( echo 进程未运行,执行其他操作 :: 在此添加未运行时的操作代码 )
二、类Unix Shell环境(Git Bash/WSL bash等)
方法1:通过命令退出码判断(更高效)
直接判断findstr的执行结果,无需捕获输出:
if tasklist | findstr /I "notepad++.exe" > /dev/null; then echo "进程正在运行,将终止它" taskkill /F /IM notepad++.exe else echo "进程未运行,执行其他操作" # 在此添加未运行时的操作代码 fi
方法2:通过输出内容是否为空判断
捕获命令输出后,再判断结果是否非空:
# 执行命令并保存输出结果 process_output=$(tasklist | findstr /I "notepad++.exe") if [ -n "$process_output" ]; then echo "进程正在运行,将终止它" taskkill /F /IM notepad++.exe else echo "进程未运行,执行其他操作" # 在此添加未运行时的操作代码 fi
错误细节说明
你之前的脚本中:
[ -z "tasklist | findstr /I notepad++.exe" ]里的引号将命令包裹成了普通字符串,这个字符串本身非空,所以-z判断永远为假|| [ echo "Empty" ]是无效语法,[(test命令)只能识别特定判断操作符,不能直接执行echo命令,这就是进程未运行时脚本报错的核心原因
内容的提问来源于stack exchange,提问作者user3122648
相关产品推荐
相关产品推荐

