首先,我尝试/proc/cmdline
用这个脚本进行解析:
#!/bin/bash
for i in $(cat /proc/cmdline)
do
export $i
done
我尝试做一个systemd服务
[Unit]
Description=Parse cmdline
[Service]
Type=simple
ExecStart=/bin/bash -c "source /opt/cmdline_parser.sh"
[Install]
WantedBy=default.target
手动启动服务可以工作,但变量不会导出到我的 shell 中。我需要尽早完成此操作,以便能够选择开始登录或启动脚本。因此,放入第一个脚本/etc/profile.d
是不可能的。
我想测试的内核参数是:“deploy package=testxz_9e full bittorrent”
我在 nfsroot 上 PXE 启动客户端,并且如果设置了 $deploy,我想启动部署脚本。该脚本需要 $package 来知道要部署哪个存档,$full 意味着我将恢复并 mkfs 所有分区,$bittorrent 告诉使用 bittorent 进行部署。
我希望将这些 var 导出到 systemd 使用的 shell 中。对于没有“var=value”语法的var,我只想用bash“if [[ -v $var ]]”测试它们,所以我认为如果它没有值并不重要。
这里是 PXE 启动文件:
DEFAULT tool
label tool
KERNEL tool_nfs/vmlinuz
APPEND ro initrd=tool_nfs/initrd.img root=/dev/nfs ip=dhcp nfsroot=xxx.xxx.xxx.xxx:/srv/nfsroot web_srv=xxx.xxx.xxx.xxx deploy package=testxz_9e full=y bittorrent