%PDF- %PDF-
Direktori : /snap/core20/current/usr/libexec/core/ |
Current File : //snap/core20/current/usr/libexec/core/get-arg |
#!/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