diff options
author | 2025-01-15 11:52:10 +0100 | |
---|---|---|
committer | 2025-01-15 11:52:10 +0100 | |
commit | 5460c6283752530f3651ac7ab4299a857d46d2a9 (patch) | |
tree | e3986779baa2f443c3678a76e93fd70ef6457204 /utils/session-type.zsh | |
parent | 5a83d107a98d0d0f3b15dc73103c915ec6deaf1f (diff) | |
download | zuwu-5460c6283752530f3651ac7ab4299a857d46d2a9.tar.gz zuwu-5460c6283752530f3651ac7ab4299a857d46d2a9.tar.bz2 zuwu-5460c6283752530f3651ac7ab4299a857d46d2a9.tar.lz zuwu-5460c6283752530f3651ac7ab4299a857d46d2a9.zip |
feat: small shell util
Diffstat (limited to 'utils/session-type.zsh')
-rw-r--r-- | utils/session-type.zsh | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/utils/session-type.zsh b/utils/session-type.zsh new file mode 100644 index 0000000..074cd54 --- /dev/null +++ b/utils/session-type.zsh @@ -0,0 +1,61 @@ +# +# A function for detecting information about the current session, entirely using shell builtins and env variables. +# +# This file is part of the zuwu project - a general-purpose zsh initialization and utility framework. +# It is not used by zuwu at the moment, but rather is provided to shell script developers as a utility function they can integrate into their own codebases +# +# Authors: +# memdmp <https://mem.estrogen.zone/> +# + +function { + local session_extensions=() + local session_base="local" + + # Detect Interactivity & Login State + local is_interactive=false; + local is_login=false; + if [[ $- == *i* ]]; then + is_interactive=true + fi + if [[ $- == *l* ]]; then + is_login=true + fi + if [[ "$is_interactive" && "$is_login" ]]; then + session_extensions+=( + interactive + login + ) + elif [[ "$is_interactive" ]]; then + session_extensions+=(interactive) + elif [[ "$is_login" ]]; then + session_extensions+=(login) + else + session_extensions+=(headless) + fi + + # Detect if local or remote, and the kind + if [ -n "$SSH_TTY" ]; then + session_base=remote + session_extensions+=( + ssh + ssh_tty + ) + elif [ -n "$SSH_CLIENT" ]; then + session_base=remote + session_extensions+=( + ssh + ) + else + # Expensive ssh session detection - spawns a `ps` process. You may want this if you need reliable session type detection + # case $(ps -o comm= -p "$PPID") in + # sshd|*/sshd) session_base=remote; session_extensions+=(ssh);; + # esac + fi + + # Join together into a final, content-type-alike variable + SESSION_TYPE="$session_base/${(j.+.)session_extensions}" +} + +# Example use: +# [[ "$SESSION_TYPE+" == *(+|/)interactive+* ]] && echo "Is in interactive session" |