%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /snap/core20/current/usr/libexec/core/
Upload File :
Create Path :
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

Zerion Mini Shell 1.0