POSIX compliance, shellcheck

This commit is contained in:
ItsDrike 2021-12-18 18:09:25 +01:00
parent d843e90462
commit 826cef4e6e
No known key found for this signature in database
GPG key ID: FB8CA11A2CF3A843
5 changed files with 114 additions and 96 deletions

View file

@ -81,7 +81,8 @@ alias zbi='z -b -I' # pick parent directory to cd into with fzf
## Make aliases for individual cpython/pypy versions ## Make aliases for individual cpython/pypy versions
py_versions="\n2\n3\n3.6\n3.7\n3.8\n3.9\n3.10" py_versions="\n2\n3\n3.6\n3.7\n3.8\n3.9\n3.10"
echo "$py_versions" | while read version; do # shellcheck disable=SC2139
echo "$py_versions" | while read -r version; do
for python in python pypy; do for python in python pypy; do
[ "$python" = "python" ] && prefix="py" || prefix="pypy" [ "$python" = "python" ] && prefix="py" || prefix="pypy"
@ -251,7 +252,7 @@ alias tty-clock='tty-clock -Ssc' # Terminal clock screensaver
alias rick='curl -s -L https://raw.githubusercontent.com/ItsDrike/rickrollrc/master/roll.sh| bash' # Terminal rickroll alias rick='curl -s -L https://raw.githubusercontent.com/ItsDrike/rickrollrc/master/roll.sh| bash' # Terminal rickroll
# If user is not root, pass all commands via sudo/doas # If user is not root, pass all commands via sudo/doas
if [ $UID -ne 0 ]; then if [ "$(id -u)" -ne 0 ]; then
# Enable aliases to be sudoed/doased # Enable aliases to be sudoed/doased
# with doas having precedence over sudo if found # with doas having precedence over sudo if found
@ -266,7 +267,7 @@ fi
# enable color support # enable color support
if [ -x /usr/bin/dircolors ]; then if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" (test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)") || eval "$(dircolors -b)"
alias dir='dir --color=auto' alias dir='dir --color=auto'
alias vdir='vdir --color=auto' alias vdir='vdir --color=auto'
@ -284,7 +285,7 @@ fi
# Normalize `open` across Linux, macOS, and Windows. # Normalize `open` across Linux, macOS, and Windows.
# This is needed to make `open` function (see below) cross-platform # This is needed to make `open` function (see below) cross-platform
if [ ! $(uname -s) = 'Darwin' ]; then if [ ! "$(uname -s)" = 'Darwin' ]; then
if grep -q Microsoft /proc/version; then if grep -q Microsoft /proc/version; then
# Ubuntu on Windows using the Linux subsystem # Ubuntu on Windows using the Linux subsystem
alias open='explorer.exe' alias open='explorer.exe'
@ -295,10 +296,12 @@ fi
# Functions # Functions
if [ -f ~/.config/shell/functions ]; then if [ -f ~/.config/shell/functions ]; then
source ~/.config/shell/functions # shellcheck source=/home/itsdrike/.config/shell/functions
. "$HOME/.config/shell/functions"
fi fi
# Extra # Extra
if [ -f ~/.config/shell/extra ]; then if [ -f ~/.config/shell/extra ]; then
source ~/.config/shell/extra # shellcheck source=/home/itsdrike/.config/shell/extra
. "$HOME/.config/shell/extra"
fi fi

View file

@ -1,4 +1,4 @@
#!/usr/bin/env bash #!/bin/sh
# Environmental variable definitions. # Environmental variable definitions.
# This file is only sourced once after login, unlike .zshrc/.bashrc # This file is only sourced once after login, unlike .zshrc/.bashrc
@ -8,6 +8,8 @@
# which means the XDG definitions will be ignored anyway, and # which means the XDG definitions will be ignored anyway, and
# defining them may break programs when root is actually logged in. # defining them may break programs when root is actually logged in.
# Define some variables for POSIX compatibility
uid="$(id -u)"
# Default programs # Default programs
export EDITOR="nvim" export EDITOR="nvim"
@ -18,7 +20,7 @@ export TERMINAL="alacritty"
export XDG_CONFIG_HOME="$HOME/.config" export XDG_CONFIG_HOME="$HOME/.config"
export XDG_CACHE_HOME="$HOME/.cache" export XDG_CACHE_HOME="$HOME/.cache"
export XDG_DATA_HOME="$HOME/.local/share" export XDG_DATA_HOME="$HOME/.local/share"
export XDG_RUNTIME_DIR="/run/user/$UID" export XDG_RUNTIME_DIR="/run/user/$uid"
# Per-Application XDG settings # Per-Application XDG settings
export ZDOTDIR="$XDG_CONFIG_HOME/zsh" export ZDOTDIR="$XDG_CONFIG_HOME/zsh"
@ -44,6 +46,7 @@ export NERDTREE_BOOKMARKS="$XDG_CONFIG_HOME/NERDTreeBookmarks"
# Colorful man pages # Colorful man pages
# If bat is installed, use it as manpager # If bat is installed, use it as manpager
# shellcheck disable=SC2155
if command -v bat > /dev/null; then if command -v bat > /dev/null; then
export MANPAGER="sh -c 'col -bx | bat -l man -p'" export MANPAGER="sh -c 'col -bx | bat -l man -p'"
else else
@ -64,3 +67,6 @@ export XSECURELOCK_SHOW_DATETIME=1 # Show current date and time in xsecurelock
export QT_QPA_PLATFORMTHEME=qt5ct # Have QT use the theme from qt5ct export QT_QPA_PLATFORMTHEME=qt5ct # Have QT use the theme from qt5ct
#export QT_QPA_PLATFORMTHEME="gtk2" # Have QT use gtk2 theme. #export QT_QPA_PLATFORMTHEME="gtk2" # Have QT use gtk2 theme.
# Remove irrelevant variables added for posix compatibility
unset posix

View file

@ -1,18 +1,23 @@
#!/usr/bin/env zsh #!/bin/sh
# TODO: Currently, this file isn't entirely POSIX compatible,
# it will run fine with bash or zsh, however some functions may cause
# issues with pure POSIX. The fill will however run fine, the errors
# would only occur if the incompatible functions would be started.
# Show application listening on given port # Show application listening on given port
function port() { port() {
sudo netstat -pln | grep $1 | awk '{print $NF}' sudo netstat -pln | grep "$1" | awk '{print $NF}'
} }
# Create a new directory and enter it # Create a new directory and enter it
function mkd() { mkd() {
mkdir -p "$@" && cd "$_"; # shellcheck disable=SC2164
mkdir -p "$1" && cd "$1";
} }
# `o` with no arguments opens the current directory, otherwise opens the given # `o` with no arguments opens the current directory, otherwise opens the given
# location # location
function o() { o() {
if [ $# -eq 0 ]; then if [ $# -eq 0 ]; then
open .; open .;
else else
@ -21,16 +26,16 @@ function o() {
} }
# Use bat for nicer git diffs # Use bat for nicer git diffs
function batdiff() { batdiff() {
git diff --name-only --diff-filter=d | xargs bat --diff git diff --name-only --diff-filter=d | xargs bat --diff
} }
# Determine size of a file or total size of a directory # Determine size of a file or total size of a directory
function dirsize() { dirsize() {
if du -b /dev/null > /dev/null 2>&1; then if du -b /dev/null > /dev/null 2>&1; then
local arg=-sbh; arg=-sbh;
else else
local arg=-sh; arg=-sh;
fi fi
if [[ -n "$*" ]]; then if [[ -n "$*" ]]; then
\du $arg -- "$@"; \du $arg -- "$@";
@ -39,10 +44,10 @@ function dirsize() {
fi; fi;
} }
function randmac() { randmac() {
sudo ip link set dev $1 down sudo ip link set dev "$1" down
sudo macchanger -A $1 sudo macchanger -A "$1"
sudo ip link set dev $1 up sudo ip link set dev "$1" up
} }
# Go to the root of a git tree # Go to the root of a git tree
@ -59,76 +64,76 @@ cdgit () {
} }
# Create a data URL from a file # Create a data URL from a file
function dataurl() { dataurl() {
local mimeType=$(file -b --mime-type "$1"); mimeType="$(file -b --mime-type "$1")"
if [[ $mimeType == text/* ]]; then if echo "$mimeType" | grep -e "^text/.*$" >/dev/null; then
mimeType="${mimeType};charset=utf-8"; mimeType="${mimeType};charset=utf-8"
fi fi
echo "data:${mimeType};base64,$(openssl base64 -in "$1" | tr -d '\n')"; echo "data:${mimeType};base64,$(openssl base64 -in "$1" | tr -d '\n')";
} }
# `tre` is a shorthand for `tree` with hidden files and color enabled, ignoring # `tre` is a shorthand for `tree` with hidden files and color enabled, ignoring
# the `.git` directory, listing directories first. The output gets piped into # the `.git` directory, listing directories first. The output gets piped into
# `less` with options to preserve color and line numbers, unless the output is # `less` with options to preserve color and line numbers, unless the output is
# small enough for one screen. # small enough for one screen.
function tre() { tre() {
tree -I '.git|node_modules|bower_components' --group-directories-first "$@" | less -FRNX; tree -I '.git|node_modules|bower_components' --group-directories-first "$@" | less -FRNX;
} }
# Show all the names (CNs and SANs) listed in the SSL certificate # Show all the names (CNs and SANs) listed in the SSL certificate
# for a given domain # for a given domain
function getcertnames() { getcertnames() {
if [ -z "${1}" ]; then if [ -z "${1}" ]; then
echo "ERROR: No domain specified."; echo "ERROR: No domain specified.";
return 1; return 1;
fi; fi;
local domain="${1}"; domain="${1}";
echo "Testing ${domain}…"; echo "Testing ${domain}…";
echo ""; # newline echo ""; # newline
local tmp=$(echo -e "GET / HTTP/1.0\nEOT" \ tmp=$(echo -e "GET / HTTP/1.0\nEOT" \
| openssl s_client -connect "${domain}:443" -servername "${domain}" 2>&1); | openssl s_client -connect "${domain}:443" -servername "${domain}" 2>&1);
if [[ "${tmp}" = *"-----BEGIN CERTIFICATE-----"* ]]; then if [[ "${tmp}" = *"-----BEGIN CERTIFICATE-----"* ]]; then
local certText=$(echo "${tmp}" \ certText=$(echo "${tmp}" \
| openssl x509 -text -certopt "no_aux, no_header, no_issuer, no_pubkey, \ | openssl x509 -text -certopt "no_aux, no_header, no_issuer, no_pubkey, \
no_serial, no_sigdump, no_signame, no_validity, no_version"); no_serial, no_sigdump, no_signame, no_validity, no_version");
echo "Common Name:"; echo "Common Name:";
echo ""; # newline echo ""; # newline
echo "${certText}" | grep "Subject:" | sed -e "s/^.*CN=//" | sed -e "s/\/emailAddress=.*//"; echo "${certText}" | grep "Subject:" | sed -e "s/^.*CN=//" | sed -e "s/\/emailAddress=.*//";
echo ""; # newline echo ""; # newline
echo "Subject Alternative Name(s):"; echo "Subject Alternative Name(s):";
echo ""; # newline echo ""; # newline
echo "${certText}" | grep -A 1 "Subject Alternative Name:" \ echo "${certText}" | grep -A 1 "Subject Alternative Name:" \
| sed -e "2s/DNS://g" -e "s/ //g" | tr "," "\n" | tail -n +2; | sed -e "2s/DNS://g" -e "s/ //g" | tr "," "\n" | tail -n +2;
return 0; return 0;
else else
echo "ERROR: Certificate not found."; echo "ERROR: Certificate not found.";
return 1; return 1;
fi; fi;
} }
# Compare original and gzipped file size # Compare original and gzipped file size
function gz-compare() { gz_compare() {
local origsize=$(wc -c < "$1"); origsize=$(wc -c < "$1");
local gzipsize=$(gzip -c "$1" | wc -c); gzipsize=$(gzip -c "$1" | wc -c);
local ratio=$(echo "$gzipsize * 100 / $origsize" | bc -l); ratio=$(echo "$gzipsize * 100 / $origsize" | bc -l);
printf "orig: %d bytes\n" "$origsize"; printf "orig: %d bytes\n" "$origsize";
printf "gzip: %d bytes (%2.2f%%)\n" "$gzipsize" "$ratio"; printf "gzip: %d bytes (%2.2f%%)\n" "$gzipsize" "$ratio";
} }
# Extract almost any archive # Extract almost any archive
function extract { extract() {
if [ -z "$1" ]; then if [ -z "$1" ]; then
# display usage if no parameters given # display usage if no parameters given
echo "Usage: extract <path/file_name>.<zip|rar|bz2|gz|tar|tbz2|tgz|Z|7z|xz|ex|tar.bz2|tar.gz|tar.xz>" echo "Usage: extract <path/file_name>.<zip|rar|bz2|gz|tar|tbz2|tgz|Z|7z|xz|ex|tar.bz2|tar.gz|tar.xz>"
echo " extract <path/file_name_1.ext> [path/file_name_2.ext] [path/file_name_3.ext]" echo " extract <path/file_name_1.ext> [path/file_name_2.ext] [path/file_name_3.ext]"
return 1 return 1
else else
for n in $@ for n in "$@"
do do
if [ -f "$n" ] ; then if [ -f "$n" ] ; then
case "${n%,}" in case "${n%,}" in
@ -158,17 +163,18 @@ fi
} }
# Create a .tar.gz archive, using `zopfli`, `pigz` or `gzip` for compression # Create a .tar.gz archive, using `zopfli`, `pigz` or `gzip` for compression
function targz() { targz() {
# Combine given names spearated with spaces as the filename # Combine given names spearated with spaces as the filename
local tmpFile="${@%/}.tar"; tmpFile="${*%/}.tar"
tar -cvf "${tmpFile}" "${@}" || return 1;
tar -cvf "${tmpFile}" "${@}" || return 1
size=$( size=$(
stat -f"%z" "${tmpFile}" 2> /dev/null; # macOS `stat` stat -f"%z" "${tmpFile}" 2> /dev/null; # macOS `stat`
stat -c"%s" "${tmpFile}" 2> /dev/null; # GNU `stat` stat -c"%s" "${tmpFile}" 2> /dev/null; # GNU `stat`
); );
local cmd=""; cmd="";
if (( size < 52428800 )) && hash zopfli 2> /dev/null; then if (( size < 52428800 )) && hash zopfli 2> /dev/null; then
# the .tar file is smaller than 50 MB and Zopfli is available; use it # the .tar file is smaller than 50 MB and Zopfli is available; use it
cmd="zopfli"; cmd="zopfli";
@ -192,11 +198,12 @@ function targz() {
echo "${tmpFile}.gz ($((zippedSize / 1000)) kB) created successfully."; echo "${tmpFile}.gz ($((zippedSize / 1000)) kB) created successfully.";
} }
function anonymize { anonymize() {
# Reset the prompt on initial run to allow this script # Reset the prompt on initial run to allow this script
# to be ran multiple times without user having to reload # to be ran multiple times without user having to reload
# PS1 manually # PS1 manually
source ${XDG_CONFIG_DIR:-$HOME/.config}/shell/prompt # shellcheck source=/home/itsdrike/.config/shell/prompt
. "${XDG_CONFIG_DIR:-$HOME/.config}/shell/prompt"
# Regular expression to match 0-255 numbers (color) # Regular expression to match 0-255 numbers (color)
color_int_re='^(0+)?([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])$' color_int_re='^(0+)?([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])$'
@ -211,7 +218,7 @@ function anonymize {
AT_COLOR="%F{004}" AT_COLOR="%F{004}"
MACHINE_COLOR="%F{070}" MACHINE_COLOR="%F{070}"
while [[ $# -gt 0 ]]; do while [ $# -gt 0 ]; do
key=$1 key=$1
case $key in case $key in

View file

@ -1,4 +1,5 @@
#!/usr/bin/env zsh #!/usr/bin/env zsh
# shellcheck disable=SC2030,SC2031
# Set default keybindings (mostly from oh-my-zsh) # Set default keybindings (mostly from oh-my-zsh)
# Make sure that the terminal is in application mode when zle is active, since # Make sure that the terminal is in application mode when zle is active, since
@ -18,30 +19,30 @@ fi
bindkey -e bindkey -e
# Start typing + [Up-Arrow] - fuzzy find history forward # Start typing + [Up-Arrow] - fuzzy find history forward
if [[ -n "${terminfo[kcuu1]}" ]]; then if [ -n "${terminfo[kcuu1]}" ]; then
autoload -U up-line-or-beginning-search autoload -U up-line-or-beginning-search
zle -N up-line-or-beginning-search zle -N up-line-or-beginning-search
bindkey "${terminfo[kcuu1]}" up-line-or-beginning-search bindkey "${terminfo[kcuu1]}" up-line-or-beginning-search
fi fi
# Start typing + [Down-Arrow] - fuzzy find history backward # Start typing + [Down-Arrow] - fuzzy find history backward
if [[ -n "${terminfo[kcud1]}" ]]; then if [ -n "${terminfo[kcud1]}" ]; then
autoload -U down-line-or-beginning-search autoload -U down-line-or-beginning-search
zle -N down-line-or-beginning-search zle -N down-line-or-beginning-search
bindkey "${terminfo[kcud1]}" down-line-or-beginning-search bindkey "${terminfo[kcud1]}" down-line-or-beginning-search
fi fi
# [Home] - Go to beginning of line # [Home] - Go to beginning of line
[[ -n "${terminfo[khome]}" ]] && bindkey "${terminfo[khome]}" beginning-of-line || bindkey "^[[H" beginning-of-line ([ -n "${terminfo[khome]}" ] && bindkey "${terminfo[khome]}" beginning-of-line) || bindkey "^[[H" beginning-of-line
# [End] - Go to end of line # [End] - Go to end of line
[[ -n "${terminfo[kend]}" ]] && bindkey "${terminfo[kend]}" end-of-line || bindkey "^[[F" end-of-line ([ -n "${terminfo[kend]}" ] && bindkey "${terminfo[kend]}" end-of-line) || bindkey "^[[F" end-of-line
# [Shift-Tab] - move through the completion menu backwards # [Shift-Tab] - move through the completion menu backwards
[[ -n "${terminfo[kcbt]}" ]] && bindkey "${terminfo[kcbt]}" reverse-menu-complete [ -n "${terminfo[kcbt]}" ] && bindkey "${terminfo[kcbt]}" reverse-menu-complete
# [Backspace] - delete backward # [Backspace] - delete backward
bindkey '^?' backward-delete-char bindkey '^?' backward-delete-char
# [Delete] - delete forward # [Delete] - delete forward
[[ -n "${terminfo[kdch1]}" ]] && bindkey "${terminfo[kdch1]}" delete-char || bindkey "^[[3~" delete-char ([ -n "${terminfo[kdch1]}" ] && bindkey "${terminfo[kdch1]}" delete-char) || bindkey "^[[3~" delete-char
# [Ctrl-Delete] - delete whole forward-word # [Ctrl-Delete] - delete whole forward-word
bindkey '^[[3;5~' kill-word bindkey '^[[3;5~' kill-word
@ -53,9 +54,9 @@ bindkey '^[[1;5D' backward-word
# [Ctrl-r] - Search backward incrementally for a specified string. The string may begin with ^ to anchor the search to the beginning of the line. # [Ctrl-r] - Search backward incrementally for a specified string. The string may begin with ^ to anchor the search to the beginning of the line.
bindkey '^r' history-incremental-search-backward bindkey '^r' history-incremental-search-backward
# [PageUp] - Up a line of history # [PageUp] - Up a line of history
[[ -n "${terminfo[kpp]}" ]] && bindkey "${terminfo[kpp]}" up-line-or-history [ -n "${terminfo[kpp]}" ] && bindkey "${terminfo[kpp]}" up-line-or-history
# [PageDown] - Down a line of history # [PageDown] - Down a line of history
[[ -n "${terminfo[knp]}" ]] && bindkey "${terminfo[knp]}" down-line-or-history [ -n "${terminfo[knp]}" ] && bindkey "${terminfo[knp]}" down-line-or-history
# [Space] - do history expansion on space # [Space] - do history expansion on space
bindkey ' ' magic-space bindkey ' ' magic-space

View file

@ -1,4 +1,5 @@
#!/usr/bin/env zsh #!/usr/bin/env zsh
# shellcheck disable=SC2155
# Configuration variables: # Configuration variables:
@ -75,7 +76,7 @@ working_directory() {
if [ $USE_SHORTENED_WORKDIR != 1 ]; then if [ $USE_SHORTENED_WORKDIR != 1 ]; then
echo -n " $BLUE$~" echo -n " $BLUE$~"
elif [ $TERM = "linux" ]; then elif [ "$TERM" = "linux" ]; then
echo -n " $BLUE%(5~|%-1~/.../%3~|%4~)" echo -n " $BLUE%(5~|%-1~/.../%3~|%4~)"
else else
echo -n " $BLUE%(5~|%-1~/…/%3~|%4~)" echo -n " $BLUE%(5~|%-1~/…/%3~|%4~)"
@ -96,7 +97,7 @@ exec_time_preexec_hook() {
exec_time_precmd_hook() { exec_time_precmd_hook() {
[[ $SHOW_CMD_TIME == 0 ]] && return [[ $SHOW_CMD_TIME == 0 ]] && return
[[ -z $PROMPT_EXEC_TIME_START ]] && return [[ -z $PROMPT_EXEC_TIME_START ]] && return
local PROMPT_EXEC_TIME_STOP=$(date +%s.%N) local PROMPT_EXEC_TIME_STOP="$(date +%s.%N)"
PROMPT_EXEC_TIME_DURATION=$(echo "($PROMPT_EXEC_TIME_STOP - $PROMPT_EXEC_TIME_START) * 1000" | bc -l) PROMPT_EXEC_TIME_DURATION=$(echo "($PROMPT_EXEC_TIME_STOP - $PROMPT_EXEC_TIME_START) * 1000" | bc -l)
unset PROMPT_EXEC_TIME_START unset PROMPT_EXEC_TIME_START
} }
@ -104,24 +105,24 @@ format_time() {
# Do some formatting to get nice time (e.g. 2m 12s) from miliseconds # Do some formatting to get nice time (e.g. 2m 12s) from miliseconds
# $1 is the milisecond amount (int or float) # $1 is the milisecond amount (int or float)
# $2 is the precision (ms/s/m/h/d) # $2 is the precision (ms/s/m/h/d)
local T=$1 local T="$1"
local D=$(echo "scale=0;$T/1000/60/60/24" | bc -l) local D="$(echo "scale=0;$T/1000/60/60/24" | bc -l)"
local H=$(echo "scale=0;$T/1000/60/60%24" | bc -l) local H="$(echo "scale=0;$T/1000/60/60%24" | bc -l)"
local M=$(echo "scale=0;$T/1000/60%60" | bc -l) local M="$(echo "scale=0;$T/1000/60%60" | bc -l)"
local S=$(echo "scale=0;$T/1000%60" | bc -l) local S="$(echo "scale=0;$T/1000%60" | bc -l)"
local MS=$(echo "scale=0;$T%1000" | bc -l) local MS="$(echo "scale=0;$T%1000" | bc -l)"
local precision=$2 local precision=$2
local out="" local out=""
case "$precision" in case "$precision" in
"ms") [[ $MS > 0 ]] && out="$(printf "%dms" $MS) ${out}"; precision="s" ;& "ms") [[ "$MS" -gt 0 ]] && out="$(printf "%dms" "$MS") ${out}"; precision="s" ;&
"s") [[ $S > 0 ]] && out="$(printf "%ds" $S) ${out}"; precision="m" ;& "s") [[ "$S" -gt 0 ]] && out="$(printf "%ds" "$S") ${out}"; precision="m" ;&
"m") [[ $M > 0 ]] && out="$(printf "%dm" $M) ${out}"; precision="h" ;& "m") [[ "$M" -gt 0 ]] && out="$(printf "%dm" "$M") ${out}"; precision="h" ;&
"h") [[ $H > 0 ]] && out="$(printf "%dh" $H) ${out}"; precision="d" ;& "h") [[ "$H" -gt 0 ]] && out="$(printf "%dh" "$H") ${out}"; precision="d" ;&
"d") [[ $D > 0 ]] && out="$(printf "%dd" $D) ${out}" ;; "d") [[ "$D" -gt 0 ]] && out="$(printf "%dd" "$D") ${out}" ;;
*) out="$T" ;; # Return $1 ($T) if precision wasn't specified/valid *) out="$T" ;; # Return $1 ($T) if precision wasn't specified/valid
esac esac
printf "$out" printf "%s" "$out"
} }
display_cmd_time() { display_cmd_time() {
[[ $CMD_TIME_SHOW == 0 ]] && return [[ $CMD_TIME_SHOW == 0 ]] && return
@ -134,7 +135,7 @@ display_cmd_time() {
# this happens when all fields (seconds/minutes/...) are 0, # this happens when all fields (seconds/minutes/...) are 0,
# if we use milisecond precision, this will likely never happen # if we use milisecond precision, this will likely never happen
# but with other precisions, it could # but with other precisions, it could
[[ "$(expr length "$time_took")" == 0 ]] && return [ ${#time_took} -eq 0 ] && return
echo -n " ${LBLUE}took ${time_took}" echo -n " ${LBLUE}took ${time_took}"
} }
@ -158,7 +159,7 @@ PS2="$RED\ $RESET"
# Right side prompt # Right side prompt
RPS1="" RPS1=""
if [ $TERM = "linux" ]; then if [ "$TERM" = "linux" ]; then
# Displaying cmd time here works, but often causes issues when we # Displaying cmd time here works, but often causes issues when we
# resize the terminal, since right prompts can be annoying to deal # resize the terminal, since right prompts can be annoying to deal
# with when resizing. This would run relatively often so it makes # with when resizing. This would run relatively often so it makes