You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SoF2 shell脚本运行报错[1: command not found]求助

解决Shell脚本中[1: command not found错误

嘿,这个错误我可太熟了!问题出在你if语句里的方括号和变量之间没有添加空格——shell对空格的要求可是相当严格的哦。

错误根源

在shell中,[其实是一个内置命令(和test命令等价),它需要和后面的参数用空格分隔开。你写的["$SERVER" != "0"]会被shell解析成一个名为["$SERVER"的命令,当$SERVER的值为1时,就变成了[1,系统自然找不到这个命令,于是抛出[1: command not found的错误。

修正后的完整脚本

SERVER=$(ps -ef | grep -v grep | grep -c sof2ded)
if [ "$SERVER" != "0" ]; then
    echo "Already Running, exiting"
    exit
else
    echo "Starting up the server..."
    cd /home/sof2/
    /home/sof2/crons/start.sh > /dev/null 2>&1
fi

关键改动说明

  • 在[后面添加了空格,]前面也添加了空格,确保[命令能正确识别后续参数
  • 把老式的反引号命令替换`ps...`改成了更推荐的$()语法,可读性更好,还支持嵌套场景

额外优化建议

如果你的脚本运行在Bash环境下,还可以用[[ ]]替代[ ],它不需要担心变量为空时的引号问题,语法更灵活也更安全:

SERVER=$(ps -ef | grep -v grep | grep -c sof2ded)
if [[ $SERVER != 0 ]]; then
    echo "Already Running, exiting"
    exit
else
    echo "Starting up the server..."
    cd /home/sof2/
    /home/sof2/crons/start.sh > /dev/null 2>&1
fi

另外,检查进程的方式还有更简洁可靠的方案,比如用pgrep直接过滤进程名,避免手动处理grep自身的干扰:

if pgrep sof2ded > /dev/null; then
    echo "Already Running, exiting"
    exit
else
    echo "Starting up the server..."
    cd /home/sof2/
    /home/sof2/crons/start.sh > /dev/null 2>&1
fi

内容的提问来源于stack exchange,提问作者user3927399

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:15:25