Linux lhjmq-records 5.15.0-118-generic #128-Ubuntu SMP Fri Jul 5 09:28:59 UTC 2024 x86_64
Your IP : 3.137.214.16
#!/bin/sh
# Usage:
# get-arg param-name
#
# get-arg will look for kernel parameter "param-name" or "param_name"
# and return 0 if found, 1 if not found. If the parameter as a value,
# e.g. "param-name=the-value", then the value "the-value" will be
# printed.
# For more information on how to parse kernel parameters, see function
# `next_arg` in
# https://github.com/torvalds/linux/blob/master/lib/cmdline.c
set -eu
if [ "$#" -ne 1 ]; then
echo "Expected kernel parameter name as argument" 1>&2
exit 1
fi
looking_for="$(echo "${1}" | sed 's/_/-/g')"
if [ "${SYSTEMD_PROC_CMDLINE:+set}" = set ]; then
# Using same debug variable as systemd for testing
cmdline="${SYSTEMD_PROC_CMDLINE}"
else
cmdline=$(cat /proc/cmdline)
fi
set --
# We cannot use ANSI-C quoting (e.g. $'\n') in busybox-initramfs
whitespaces="$(printf '\t\n\v\f\r \240')"
in_quote=no
param=
current="${cmdline}"
while [ -n "${current}" ]; do
# We cannot use subtring parameter expansion
# (e.g. ${cmdline:$i:1}) in busybox-initramfs
suffix="${current#?}"
char="${current%${suffix}}"
current="${suffix}"
case "${char}" in
["${whitespaces}"])
if [ "${in_quote}" = no ]; then
if [ -n "${param}" ]; then
set -- "$@" "${param}"
fi
param=
else
param="${param}${char}"
fi
;;
'"')
if [ "${in_quote}" = yes ]; then
in_quote=no
else
in_quote=yes
fi
;;
*)
param="${param}${char}"
;;
esac
done
if [ -n "${param}" ]; then
set -- "$@" "${param}"
fi
for param in "$@"; do
name="$(echo "${param%%=*}" | sed 's/_/-/g')"
if [ "${name}" = "${looking_for}" ]; then
case "${param}" in
*=*)
echo "${param#*=}"
;;
esac
exit 0
fi
done
exit 1
|