177 lines
4.4 KiB
Bash
177 lines
4.4 KiB
Bash
#! @shell@
|
|
|
|
set -o errexit
|
|
set -o nounset
|
|
|
|
show_help() {
|
|
@coreutils@/bin/cat << EOF
|
|
Usage: uname [OPTION]...
|
|
Print certain system information. With no OPTION, same as -s.
|
|
|
|
-a, --all print all information, in the following order,
|
|
except omit -p and -i if unknown:
|
|
-s, --kernel-name print the kernel name
|
|
-n, --nodename print the network node hostname
|
|
-r, --kernel-release print the kernel release
|
|
-v, --kernel-version print the kernel version
|
|
-m, --machine print the machine hardware name
|
|
-p, --processor print the processor type (non-portable)
|
|
-i, --hardware-platform print the hardware platform (non-portable)
|
|
-o, --operating-system print the operating system
|
|
--help display this help and exit
|
|
--version output version information and exit
|
|
EOF
|
|
exit 0
|
|
}
|
|
|
|
# Potential command-line options.
|
|
version=0
|
|
all=0
|
|
|
|
|
|
kernel_name=0
|
|
nodename=0
|
|
kernel_release=0
|
|
kernel_version=0
|
|
machine=0
|
|
processor=0
|
|
hardware_platform=0
|
|
operating_system=0
|
|
|
|
# With no OPTION, same as -s.
|
|
if [[ $# -eq 0 ]]; then
|
|
kernel_name=1
|
|
fi
|
|
|
|
@getopt@/bin/getopt --test > /dev/null && rc=$? || rc=$?
|
|
if [[ $rc -ne 4 ]]; then
|
|
# This shouldn't happen.
|
|
echo "Warning: Enhanced getopt not supported, please open an issue in nixpkgs." >&2
|
|
else
|
|
# Define all short and long options.
|
|
SHORT=hvsnrvmpioa
|
|
LONG=help,version,kernel-name,nodename,kernel-release,kernel-version,machine,processor,hardware-platform,operating-system,all
|
|
|
|
# Parse all options.
|
|
PARSED=`@getopt@/bin/getopt --options $SHORT --longoptions $LONG --name "$0" -- "$@"`
|
|
|
|
eval set -- "$PARSED"
|
|
fi
|
|
|
|
# Process each argument, and set the appropriate flag if we recognize it.
|
|
while [[ $# -ge 1 ]]; do
|
|
case "$1" in
|
|
--version)
|
|
version=1
|
|
;;
|
|
-s|--kernel-name)
|
|
kernel_name=1
|
|
;;
|
|
-n|--nodename)
|
|
nodename=1
|
|
;;
|
|
-r|--kernel-release)
|
|
kernel_release=1
|
|
;;
|
|
-v|--kernel-version)
|
|
kernel_version=1
|
|
;;
|
|
-m|--machine)
|
|
machine=1
|
|
;;
|
|
-p|--processor)
|
|
processor=1
|
|
;;
|
|
-i|--hardware-platform)
|
|
hardware_platform=1
|
|
;;
|
|
-o|--operating-system)
|
|
operating_system=1
|
|
;;
|
|
-a|--all)
|
|
all=1
|
|
;;
|
|
--help)
|
|
show_help
|
|
;;
|
|
--)
|
|
shift
|
|
break
|
|
;;
|
|
*)
|
|
echo "uname: unrecognized option '$1'"
|
|
echo "Type 'uname --help' for a list of available options."
|
|
exit 1
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
|
|
KERNEL_NAME_VAL=@uSystem@
|
|
NODENAME_VAL=nixpkgs
|
|
KERNEL_RELEASE_VAL=@modDirVersion@
|
|
# #1-NixOS SMP PREEMPT_DYNAMIC Wed Dec 14 10:41:06 UTC 2022
|
|
KERNEL_VERSION_VAL="#1-NixOS Tue Jan 1 00:00:00 UTC 1980"
|
|
MACHINE_VAL=@processor@
|
|
PROCESSOR_VAL=unknown
|
|
HARDWARE_PLATFORM_VAL=unknown
|
|
OPERATING_SYSTEM_VAL=@operatingSystem@
|
|
|
|
|
|
if [[ "$version" = "1" ]]; then
|
|
# in case some script greps for GNU coreutils.
|
|
echo "uname (GNU coreutils) 9.1"
|
|
echo "Nixpkgs deterministic-uname"
|
|
exit
|
|
fi
|
|
|
|
# output of the real uname from GNU coreutils
|
|
# Darwin:
|
|
# Darwin *nodename* 22.1.0 Darwin Kernel Version 22.1.0: Sun Oct 9 20:14:30 PDT 2022; root:xnu-8792.41.9~2/RELEASE_ARM64_T8103 arm64 arm Darwin
|
|
# NixOS:
|
|
# Linux *nodename* 6.0.13 #1-NixOS SMP PREEMPT_DYNAMIC Wed Dec 14 10:41:06 UTC 2022 x86_64 GNU/Linux
|
|
# FreeBSD:
|
|
# FreeBSD *nodename* 14.0-RELEASE FreeBSD 14.0-RELEASE #0 releng/14.0-n265380-f9716eee8ab4: Fri Nov 10 05:57:23 UTC 2023 root@releng1.nyi.freebsd.org:/usr/obj/usr/src/amd64.amd64/sys/GENERIC amd64 amd64 AMD Ryzen 9 5950X 16-Core Processor FreeBSD
|
|
output=()
|
|
if [[ "$all" = "1" ]]; then
|
|
output+=("$KERNEL_NAME_VAL" "$NODENAME_VAL" "$KERNEL_RELEASE_VAL" "$KERNEL_VERSION_VAL" "$MACHINE_VAL")
|
|
# in help: except omit -p and -i if unknown.
|
|
# output+=($PROCESSOR_VAL $HARDWARE_PLATFORM_VAL)
|
|
output+=("$OPERATING_SYSTEM_VAL")
|
|
fi
|
|
|
|
if [[ "$kernel_name" = "1" ]]; then
|
|
output+=("$KERNEL_NAME_VAL")
|
|
fi
|
|
|
|
if [[ "$nodename" = "1" ]]; then
|
|
output+=("$NODENAME_VAL")
|
|
fi
|
|
|
|
if [[ "$kernel_release" = "1" ]]; then
|
|
output+=("$KERNEL_RELEASE_VAL")
|
|
fi
|
|
|
|
if [[ "$kernel_version" = "1" ]]; then
|
|
output+=("$KERNEL_VERSION_VAL")
|
|
fi
|
|
|
|
if [[ "$machine" = "1" ]]; then
|
|
output+=("$MACHINE_VAL")
|
|
fi
|
|
|
|
if [[ "$processor" = "1" ]]; then
|
|
output+=("$PROCESSOR_VAL")
|
|
fi
|
|
|
|
if [[ "$hardware_platform" = "1" ]]; then
|
|
output+=("$HARDWARE_PLATFORM_VAL")
|
|
fi
|
|
|
|
if [[ "$operating_system" = "1" ]]; then
|
|
output+=("$OPERATING_SYSTEM_VAL")
|
|
fi
|
|
|
|
echo "${output[@]}"
|