我想运行 Linux 启动标志上存在的参数的自定义启动脚本。
我想我只是创建一个 systemd 服务来运行一个 bash 脚本来检查启动时使用以下方法检查标志是否存在:
#!/bin/bash
CMDLINE="$(cat /proc/cmdline)"
if [[ "$CMDLINE" == *"myflag"* ]]; then
echo "It's there."
fi
有没有更好的办法?
答案1
如果你想变得更花哨,一个“更好”的方法可能是使用一个系统生成器;您可以进行设置SourcePath=/proc/cmdline
,以便您的生成器使用内核启动参数并从那里继续。
坚持使用 systemd 单位,因为这就是你正在使用的单位,你可以在单位定义中指定条件:
[Unit]
ConditionKernelCommandLine=myflag
在不使用 systemd 细节的情况下,您的脚本已经完成了这项工作,但如果您想要更紧凑的东西,可以将其重写为
#!/bin/sh
if grep -qw myflag /proc/cmdline; then
echo "It's there."
fi
甚至
#!/bin/sh
grep -qw myflag /proc/cmdline && echo "It's there."
国旗-q
告诉grep
我们不是输出匹配,仅反映其退出状态成功或失败;该-w
标志确保仅匹配整个单词,因此notmyflag
不会触发。