diff options
author | Patrick Spek <p.spek@tyil.nl> | 2022-08-03 13:43:09 +0200 |
---|---|---|
committer | Patrick Spek <p.spek@tyil.nl> | 2022-08-03 13:43:09 +0200 |
commit | 6a86c83f0c77deae3b9907b6f4e0e8718d2afd9f (patch) | |
tree | 93d5e9bfe08c3b98aeb0fde6e4373c56545668fb | |
parent | 8d3735481effaa50c76ed6e25337f681c6f568a4 (diff) | |
download | bashtard-6a86c83f0c77deae3b9907b6f4e0e8718d2afd9f.tar.gz bashtard-6a86c83f0c77deae3b9907b6f4e0e8718d2afd9f.tar.bz2 |
Add $BASHTARD_PLATFORM[init]
-rw-r--r-- | CHANGELOG.md | 2 | ||||
-rw-r--r-- | lib/main.bash | 37 |
2 files changed, 37 insertions, 2 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 159d468..e31930f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 the box. - The `Makefile` has been extended with targets for creating packages for GNU+Linux distributions. +- The `$BASHTARD_PLATFORM` variable now contains an additional entry, `init`, to + allow for handling different init systems on GNU+Linux in a cleaner fashion. ### Changed diff --git a/lib/main.bash b/lib/main.bash index cf3e069..bbfd602 100644 --- a/lib/main.bash +++ b/lib/main.bash @@ -138,6 +138,7 @@ discover_system() { BASHTARD_PLATFORM["version"]="$(discover_system_version)" BASHTARD_PLATFORM["term"]="$TERM" BASHTARD_PLATFORM["fqdn"]="$(hostname -f)" + BASHTARD_PLATFORM["init"]="$(discover_system_init)" # When on a Linux-using OS, check for the specific distribution in use. if [[ ${BASHTARD_PLATFORM[os]} == *"linux"* ]] @@ -174,8 +175,36 @@ discover_system_distro() { fi } -discover_system_version() { - printf "%s" "$(uname -r | awk '{print tolower($0)}')" +discover_system_init() { + local sbin_init + + # Differing init systems seems to only be a thing on GNU+Linux + if [[ ${BASHTARD_PLATFORM["os"]} != "linux" ]] + then + return + fi + + sbin_init="$(readlink -f "/sbin/init" | awk -F/ '{ print $NF }')" + + # If /sbin/init is a symlink, it will point us towards the right thing + if [[ $sbin_init != "init" ]] + then + printf "%s" "$sbin_init" + return + fi + + # Otherwise we try out /etc/inittab + if [[ -f "/etc/inittab" ]] + then + awk -F: '/^rc:/ { print $4 }' /etc/inittab \ + | awk '{ print $1 }' \ + | awk -F/ '{ print $NF }' + + return + fi + + # If we can't figure it out, show a warning + warn "$BASHTARD_NAME/util" "Can't figure out system init" } discover_system_key() { @@ -199,4 +228,8 @@ discover_system_os() { fi } +discover_system_version() { + printf "%s" "$(uname -r | awk '{print tolower($0)}')" +} + main "$@" |