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

如何检测Shell脚本是否以空格前缀的隐秘方式启动?

检测脚本是否以空格前缀隐秘启动的可靠方案

之前的方案因为依赖历史记录,要么受HISTCONTROL=ignoreboth配置影响读不到空格前缀的命令,要么连续启动时历史还没写入导致失效。这里给个绕过历史记录的方法,直接从进程信息入手:

实现代码

把这段代码加到你的脚本里:

# 获取启动脚本的父Shell进程命令行
parent_shell_cmd=$(ps -o cmd= -p "$PPID")

# 提取包含当前脚本的启动片段
current_script=$(basename "$0")
launch_line=$(echo "$parent_shell_cmd" | grep -o "\s*$current_script\b" || true)

# 判断是否有前导空格
if [[ "$launch_line" =~ ^\s+ ]]; then
    echo "警告:脚本以隐秘方式启动(命令前缀含空格)"
else
    echo "脚本以常规方式启动"
fi

为什么这个方法靠谱?

  • 不碰历史记录:直接读取父Shell进程的实时命令行,完全不受HISTCONTROL配置影响,也不会因为连续启动时历史未写入而失效。
  • 精准匹配:通过脚本文件名定位启动命令的关键部分,判断是否存在前导空格。

适配绝对路径启动的情况

如果你的脚本是用绝对路径启动的(比如 /home/you/scripts/my_script.sh),把代码里的current_script=$(basename "$0")改成current_script="$0"就行,这样能匹配完整路径的启动命令。

注意事项

这个方案基于bash环境,要是用zsh等其他Shell,可能需要微调ps的参数,但核心逻辑——读取父进程命令行来判断——是通用的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 19:22:08