Last active
January 11, 2023 13:34
Star
You must be signed in to star a gist
Misc bash snippets
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Show timestamp for history output | |
export HISTTIMEFORMAT="%d/%m/%y %T " |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# use /etc/tcp to make TCP connections in plain bash | |
exec 3<>/dev/tcp/www.google.com/80 | |
echo -e "GET / HTTP/1.1\r\nhost: http://www.google.com\r\nConnection: close\r\n\r\n" >&3 | |
cat <&3 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# POSIX | |
# Found at http://mywiki.wooledge.org/BashFAQ/035#Manual_loop | |
# Reset all variables that might be set | |
file= | |
verbose=0 # Variables to be evaluated as shell arithmetic should be initialized to a default or validated beforehand. | |
while :; do | |
case $1 in | |
-h|-\?|--help) # Call a "show_help" function to display a synopsis, then exit. | |
show_help | |
exit | |
;; | |
-f|--file) # Takes an option argument, ensuring it has been specified. | |
if [ -n "$2" ]; then | |
file=$2 | |
shift | |
else | |
printf 'ERROR: "--file" requires a non-empty option argument.\n' >&2 | |
exit 1 | |
fi | |
;; | |
--file=?*) | |
file=${1#*=} # Delete everything up to "=" and assign the remainder. | |
;; | |
--file=) # Handle the case of an empty --file= | |
printf 'ERROR: "--file" requires a non-empty option argument.\n' >&2 | |
exit 1 | |
;; | |
-v|--verbose) | |
verbose=$((verbose + 1)) # Each -v argument adds 1 to verbosity. | |
;; | |
--) # End of all options. | |
shift | |
break | |
;; | |
-?*) | |
printf 'WARN: Unknown option (ignored): %s\n' "$1" >&2 | |
;; | |
*) # Default case: If no more options then break out of the loop. | |
break | |
esac | |
shift | |
done | |
# if --file was provided, open it for writing, else duplicate stdout | |
if [ -n "$file" ]; then | |
exec 3> "$file" | |
else | |
exec 3>&1 | |
fi | |
# Rest of the program here. | |
# If there are input files (for example) that follow the options, they | |
# will remain in the "$@" positional parameters. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# | |
# Shows a spinner while another command is running. Randomly picks one of 12 spinner styles. | |
# @args command to run (with any parameters) while showing a spinner. | |
# E.g. ‹spinner sleep 10› | |
# | |
# https://unix.stackexchange.com/a/565551/7214 | |
function shutdown() { | |
tput cnorm # reset cursor | |
} | |
trap shutdown EXIT | |
function cursorBack() { | |
echo -en "\033[$1D" | |
} | |
function spinner() { | |
# make sure we use non-unicode character type locale | |
# (that way it works for any locale as long as the font supports the characters) | |
local LC_CTYPE=C | |
local pid=$1 # Process Id of the previous running command | |
case $(($RANDOM % 12)) in | |
0) | |
local spin='⠁⠂⠄⡀⢀⠠⠐⠈' | |
local charwidth=3 | |
;; | |
1) | |
local spin='-\|/' | |
local charwidth=1 | |
;; | |
2) | |
local spin="▁▂▃▄▅▆▇█▇▆▅▄▃▂▁" | |
local charwidth=3 | |
;; | |
3) | |
local spin="▉▊▋▌▍▎▏▎▍▌▋▊▉" | |
local charwidth=3 | |
;; | |
4) | |
local spin='←↖↑↗→↘↓↙' | |
local charwidth=3 | |
;; | |
5) | |
local spin='▖▘▝▗' | |
local charwidth=3 | |
;; | |
6) | |
local spin='┤┘┴└├┌┬┐' | |
local charwidth=3 | |
;; | |
7) | |
local spin='◢◣◤◥' | |
local charwidth=3 | |
;; | |
8) | |
local spin='◰◳◲◱' | |
local charwidth=3 | |
;; | |
9) | |
local spin='◴◷◶◵' | |
local charwidth=3 | |
;; | |
10) | |
local spin='◐◓◑◒' | |
local charwidth=3 | |
;; | |
11) | |
local spin='⣾⣽⣻⢿⡿⣟⣯⣷' | |
local charwidth=3 | |
;; | |
esac | |
local i=0 | |
tput civis # cursor invisible | |
while kill -0 $pid 2>/dev/null; do | |
local i=$(((i + $charwidth) % ${#spin})) | |
printf "%s" "${spin:$i:$charwidth}" | |
cursorBack 1 | |
sleep .1 | |
done | |
tput cnorm | |
wait $pid # capture exit code | |
return $? | |
} | |
("$@") & | |
spinner $! |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment