bash脚本中pkill匹配带参数test.py进程失效的正确语法是什么?
问题根因
你当前命令无法生效的核心原因是单引号会阻止Bash变量解析:你写在单引号内的$symbol、$folder、$name不会被替换成脚本运行时的实际参数值,pkill会尝试匹配命令行里包含字面量$symbol的进程,自然找不到目标进程。
正确写法
直接把单引号替换为双引号即可,双引号内的Bash变量会正常展开:
pkill -f "test.py -s $symbol -folder $folder -n $name -d $name"
补充说明
- 不需要额外加
()或{}符号,除非你的变量名和后续字符连在一起会产生歧义(比如${name}suffix的场景),你当前的变量后都是空格,没有这类问题。 - 如果你的参数值包含空格、通配符等特殊字符,可以给变量嵌套转义双引号避免解析异常:
pkill -f "test.py -s \"$symbol\" -folder \"$folder\" -n \"$name\" -d \"$name\""
- 如果你是用完整路径
$PWD/test.py启动的进程,部分系统的pkill -f会匹配完整命令行,匹配串可补充路径避免匹配失败:
pkill -f "$PWD/test.py -s $symbol -folder $folder -n $name -d $name"
- 正式执行杀进程操作前,可先用
pgrep -f "你的匹配串"测试,确认返回的PID是目标进程后再执行pkill,避免误杀其他进程。
内容的提问来源于stack exchange,提问作者JejeBelfort
相关产品推荐
相关产品推荐

