1
0
Fork 0

clean up shell scripts

This commit is contained in:
Luca Bilke 2024-10-17 11:18:27 +02:00
commit 890dc7638e
No known key found for this signature in database
GPG key ID: F6E11C9BAA7C82F5
3 changed files with 539 additions and 514 deletions

View file

@ -33,7 +33,7 @@ __CHTSH_DATETIME="2021-04-25 12:30:30 +0200"
# #
CHTSH_HOME=${CHTSH:-"$HOME"/.cht.sh} CHTSH_HOME=${CHTSH:-"$HOME"/.cht.sh}
[ -z "$CHTSH_CONF" ] && CHTSH_CONF=$CHTSH_HOME/cht.sh.conf [ -z "$CHTSH_CONF" ] && CHTSH_CONF=$CHTSH_HOME/cht.sh.conf
# shellcheck disable=SC1090,SC2002 # shellcheck disable=SC1090
[ -e "$CHTSH_CONF" ] && source "$CHTSH_CONF" [ -e "$CHTSH_CONF" ] && source "$CHTSH_CONF"
[ -z "$CHTSH_URL" ] && CHTSH_URL=https://cht.sh [ -z "$CHTSH_URL" ] && CHTSH_URL=https://cht.sh
@ -44,7 +44,6 @@ CHTSH_MODE="$(cat "$CHTSH_HOME"/mode 2> /dev/null)"
[ "$CHTSH_MODE" != lite ] && CHTSH_MODE=auto [ "$CHTSH_MODE" != lite ] && CHTSH_MODE=auto
CHEATSH_INSTALLATION="$(cat "$CHTSH_HOME/standalone" 2>/dev/null)" CHEATSH_INSTALLATION="$(cat "$CHTSH_HOME/standalone" 2>/dev/null)"
export LESSSECURE=1 export LESSSECURE=1
STEALTH_MAX_SELECTION_LENGTH=5 STEALTH_MAX_SELECTION_LENGTH=5
@ -59,25 +58,23 @@ if echo "$KSH_VERSION" | grep -q ' 93' && ! local foo 2>/dev/null; then
alias local=typeset alias local=typeset
fi fi
fatal() fatal() {
{
echo "ERROR: $*" >&2 echo "ERROR: $*" >&2
exit 1 exit 1
} }
_say_what_i_do() _say_what_i_do() {
{
[ -n "$LOG" ] && echo "$(date '+[%Y-%m-%d %H:%M%S]') $*" >>"$LOG" [ -n "$LOG" ] && echo "$(date '+[%Y-%m-%d %H:%M%S]') $*" >>"$LOG"
local this_prompt="\033[0;1;4;32m>>\033[0m" local this_prompt="\033[0;1;4;32m>>\033[0m"
printf "\n${this_prompt}%s\033[0m\n" " $* " printf "\n${this_prompt}%s\033[0m\n" " $* "
} }
cheatsh_standalone_install() cheatsh_standalone_install() {
{
# the function installs cheat.sh with the upstream repositories # the function installs cheat.sh with the upstream repositories
# in the standalone mode # in the standalone mode
local installdir; installdir="$1" local installdir
installdir="$1"
local default_installdir="$HOME/.cheat.sh" local default_installdir="$HOME/.cheat.sh"
[ -z "$installdir" ] && installdir=${default_installdir} [ -z "$installdir" ] && installdir=${default_installdir}
@ -124,20 +121,23 @@ EOF
local dependencies=(python git virtualenv) local dependencies=(python git virtualenv)
for dep in "${dependencies[@]}"; do for dep in "${dependencies[@]}"; do
command -v "$dep" >/dev/null || \ command -v "$dep" >/dev/null ||
{ echo "DEPENDENCY: \"$dep\" is needed to install cheat.sh in the standalone mode" >&2; _exit_code=1; } {
echo "DEPENDENCY: \"$dep\" is needed to install cheat.sh in the standalone mode" >&2
_exit_code=1
}
done done
[ "$_exit_code" -ne 0 ] && return "$_exit_code" [ "$_exit_code" -ne 0 ] && return "$_exit_code"
while true; do while true; do
local _installdir local _installdir
echo -n "Where should cheat.sh be installed [$installdir]? "; read -r _installdir echo -n "Where should cheat.sh be installed [$installdir]? "
read -r _installdir
[ -n "$_installdir" ] && installdir=$_installdir [ -n "$_installdir" ] && installdir=$_installdir
if [ "$installdir" = y ] \ if [ "$installdir" = y ] ||
|| [ "$installdir" = Y ] \ [ "$installdir" = Y ] ||
|| [ "$(echo "$installdir" | tr "[:upper:]" "[:lower:]")" = yes ] [ "$(echo "$installdir" | tr "[:upper:]" "[:lower:]")" = yes ]; then
then
echo Please enter the directory name echo Please enter the directory name
echo If it was the directory name already, please prepend it with \"./\": "./$installdir" echo If it was the directory name already, please prepend it with \"./\": "./$installdir"
else else
@ -158,7 +158,8 @@ EOF
fi fi
local space_needed=700 local space_needed=700
local space_available; space_available=$(($(df -k "$installdir" | awk '{print $4}' | tail -1)/1024)) local space_available
space_available=$(($(df -k "$installdir" | awk '{print $4}' | tail -1) / 1024))
if [ "$space_available" -lt "$space_needed" ]; then if [ "$space_available" -lt "$space_needed" ]; then
echo "ERROR: Installation directory has no enough space (needed: ${space_needed}M, available: ${space_available}M" echo "ERROR: Installation directory has no enough space (needed: ${space_needed}M, available: ${space_available}M"
@ -199,8 +200,8 @@ EOF
fi fi
_say_what_i_do Creating virtual environment _say_what_i_do Creating virtual environment
virtualenv "${virtualenv_python3_option[@]}" ve \ virtualenv "${virtualenv_python3_option[@]}" ve ||
|| fatal "Could not create virtual environment with 'virtualenv ve'" fatal "Could not create virtual environment with 'virtualenv ve'"
export CHEATSH_PATH_WORKDIR=$PWD export CHEATSH_PATH_WORKDIR=$PWD
@ -212,8 +213,8 @@ EOF
fi fi
_say_what_i_do Installing python requirements into the virtual environment _say_what_i_do Installing python requirements into the virtual environment
ve/bin/"$pip" install -r requirements.txt > "$LOG" \ ve/bin/"$pip" install -r requirements.txt >"$LOG" ||
|| { {
echo "ERROR:" echo "ERROR:"
echo "---" echo "---"
@ -234,8 +235,7 @@ EOF
if CHEATSH_TEST_STANDALONE=YES \ if CHEATSH_TEST_STANDALONE=YES \
CHEATSH_TEST_SKIP_ONLINE=NO \ CHEATSH_TEST_SKIP_ONLINE=NO \
CHEATSH_TEST_SHOW_DETAILS=NO \ CHEATSH_TEST_SHOW_DETAILS=NO \
PYTHON=../ve/bin/python bash run-tests.sh | tee -a "$LOG" PYTHON=../ve/bin/python bash run-tests.sh | tee -a "$LOG"; then
then
printf "\033[0;32m%s\033[0m\n" "SUCCESS" printf "\033[0;32m%s\033[0m\n" "SUCCESS"
else else
printf "\033[0;31m%s\033[0m\n" "FAILED" printf "\033[0;31m%s\033[0m\n" "FAILED"
@ -250,8 +250,10 @@ EOF
_say_what_i_do Done _say_what_i_do Done
local v1; v1=$(printf "\033[0;1;32m") local v1
local v2; v2=$(printf "\033[0m") v1=$(printf "\033[0;1;32m")
local v2
v2=$(printf "\033[0m")
cat <<EOF | sed "s/{/$v1/; s/}/$v2/" cat <<EOF | sed "s/{/$v1/; s/}/$v2/"
@ -286,11 +288,11 @@ with the ENTRY-POINT from the URL https://ENTRY-POINT/:actualize specified
EOF EOF
} }
chtsh_mode() chtsh_mode() {
{
local mode="$1" local mode="$1"
local text; text=$( local text
text=$(
echo " auto use the standalone installation first" echo " auto use the standalone installation first"
echo " lite use the cheat sheets server directly" echo " lite use the cheat sheets server directly"
) )
@ -318,8 +320,7 @@ chtsh_mode()
fi fi
} }
get_query_options() get_query_options() {
{
local query="$*" local query="$*"
if [ -n "$CHTSH_QUERY_OPTIONS" ]; then if [ -n "$CHTSH_QUERY_OPTIONS" ]; then
case $query in case $query in
@ -330,8 +331,7 @@ get_query_options()
printf "%s" "$query" printf "%s" "$query"
} }
do_query() do_query() {
{
local query="$*" local query="$*"
local b_opts= local b_opts=
local uri="${CHTSH_URL}/\"\$(get_query_options $query)\"" local uri="${CHTSH_URL}/\"\$(get_query_options $query)\""
@ -349,10 +349,11 @@ do_query()
fi fi
} }
prepare_query() prepare_query() {
{ local section="$1"
local section="$1"; shift shift
local input="$1"; shift local input="$1"
shift
local arguments="$1" local arguments="$1"
local query local query
@ -366,13 +367,11 @@ prepare_query()
printf %s "$query$arguments" printf %s "$query$arguments"
} }
get_list_of_sections() get_list_of_sections() {
{
curl -s "${CHTSH_URL}"/:list | grep -v '/.*/' | grep '/$' | xargs curl -s "${CHTSH_URL}"/:list | grep -v '/.*/' | grep '/$' | xargs
} }
gen_random_str() gen_random_str() (
(
len=$1 len=$1
if command -v openssl >/dev/null; then if command -v openssl >/dev/null; then
openssl rand -base64 $((len * 3 / 4)) | awk -v ORS='' // openssl rand -base64 $((len * 3 / 4)) | awk -v ORS='' //
@ -386,7 +385,10 @@ gen_random_str()
elif command -v xxd >/dev/null; then elif command -v xxd >/dev/null; then
xxd -l $((len / 2)) -ps "$rdev" | awk -v ORS='' // xxd -l $((len / 2)) -ps "$rdev" | awk -v ORS='' //
else else
cd /tmp || { echo Cannot cd into /tmp >&2; exit 1; } cd /tmp || {
echo Cannot cd into /tmp >&2
exit 1
}
s= s=
# shellcheck disable=SC2000 # shellcheck disable=SC2000
while [ "$(echo "$s" | wc -c)" -lt "$len" ]; do while [ "$(echo "$s" | wc -c)" -lt "$len" ]; do
@ -407,7 +409,9 @@ if [ "$CHTSH_MODE" = auto ] && [ -d "$CHEATSH_INSTALLATION" ]; then
done done
shift $((OPTIND - 1)) shift $((OPTIND - 1))
local url; url="$1"; shift local url
url="$1"
shift
PYTHONIOENCODING=UTF-8 "$CHEATSH_INSTALLATION/ve/bin/python" "$CHEATSH_INSTALLATION/lib/standalone.py" "${url#"$CHTSH_URL"}" "$@" PYTHONIOENCODING=UTF-8 "$CHEATSH_INSTALLATION/ve/bin/python" "$CHEATSH_INSTALLATION/lib/standalone.py" "${url#"$CHTSH_URL"}" "$@"
} }
elif [ "$(uname -s)" = OpenBSD ] && [ -x /usr/bin/ftp ]; then elif [ "$(uname -s)" = OpenBSD ] && [ -x /usr/bin/ftp ]; then
@ -418,14 +422,20 @@ elif [ "$(uname -s)" = OpenBSD ] && [ -x /usr/bin/ftp ]; then
case $opt in case $opt in
b) args="$args -c $OPTARG" ;; b) args="$args -c $OPTARG" ;;
s) args="$args -M -V" ;; s) args="$args -M -V" ;;
*) echo "internal error: unsupported cURL option '$opt'" >&2; exit 1;; *)
echo "internal error: unsupported cURL option '$opt'" >&2
exit 1
;;
esac esac
done done
shift $((OPTIND - 1)) shift $((OPTIND - 1))
/usr/bin/ftp "$args" "$@" /usr/bin/ftp "$args" "$@"
} }
else else
command -v curl >/dev/null || { echo 'DEPENDENCY: install "curl" to use cht.sh' >&2; exit 1; } command -v curl >/dev/null || {
echo 'DEPENDENCY: install "curl" to use cht.sh' >&2
exit 1
}
_CURL=$(command -v curl) _CURL=$(command -v curl)
if [ x"$CHTSH_CURL_OPTIONS" != x ]; then if [ x"$CHTSH_CURL_OPTIONS" != x ]; then
curl() { curl() {
@ -496,7 +506,11 @@ if [ "$shell_mode" != yes ]; then
else else
new_section="$1" new_section="$1"
valid_sections=$(get_list_of_sections) valid_sections=$(get_list_of_sections)
valid=no; for q in $valid_sections; do [ "$q" = "$new_section/" ] && { valid=yes; break; }; done valid=no
for q in $valid_sections; do [ "$q" = "$new_section/" ] && {
valid=yes
break
}; done
if [ "$valid" = yes ]; then if [ "$valid" = yes ]; then
section="$new_section" section="$new_section"
@ -520,7 +534,10 @@ if [ "$is_macos" != yes ]; then
command -v xsel >/dev/null || echo 'DEPENDENCY: please install "xsel" for "copy"' >&2 command -v xsel >/dev/null || echo 'DEPENDENCY: please install "xsel" for "copy"' >&2
fi fi
fi fi
command -v rlwrap >/dev/null || { echo 'DEPENDENCY: install "rlwrap" to use cht.sh in the shell mode' >&2; exit 1; } command -v rlwrap >/dev/null || {
echo 'DEPENDENCY: install "rlwrap" to use cht.sh in the shell mode' >&2
exit 1
}
mkdir -p "$CHTSH_HOME/" mkdir -p "$CHTSH_HOME/"
lines=$(tput lines) lines=$(tput lines)
@ -542,15 +559,19 @@ cmd_cd() {
section="" section=""
else else
valid_sections=$(get_list_of_sections) valid_sections=$(get_list_of_sections)
valid=no; for q in $valid_sections; do [ "$q" = "$new_section/" ] && { valid=yes; break; }; done valid=no
for q in $valid_sections; do [ "$q" = "$new_section/" ] && {
valid=yes
break
}; done
if [ "$valid" = no ]; then if [ "$valid" = no ]; then
echo "Invalid section: $new_section" echo "Invalid section: $new_section"
echo "Valid sections:" echo "Valid sections:"
echo "$valid_sections" \ echo "$valid_sections" |
| xargs printf "%-10s\n" \ xargs printf "%-10s\n" |
| tr ' ' . \ tr ' ' . |
| xargs -n 10 \ xargs -n 10 |
| sed 's/\./ /g; s/^/ /' sed 's/\./ /g; s/^/ /'
else else
section="$new_section" section="$new_section"
fi fi
@ -720,13 +741,16 @@ cmd_stealth() {
do_query "$query" do_query "$query"
fi fi
fi fi
sleep 1; sleep 1
done done
trap - INT trap - INT
} }
cmd_update() { cmd_update() {
[ -w "$0" ] || { echo "The script is readonly; please update manually: curl -s ${CHTSH_URL}/:cht.sh | sudo tee $0"; return; } [ -w "$0" ] || {
echo "The script is readonly; please update manually: curl -s ${CHTSH_URL}/:cht.sh | sudo tee $0"
return
}
TMP2=$(mktemp /tmp/cht.sh.XXXXXXXXXXXXX) TMP2=$(mktemp /tmp/cht.sh.XXXXXXXXXXXXX)
curl -s "${CHTSH_URL}"/:cht.sh >"$TMP2" curl -s "${CHTSH_URL}"/:cht.sh >"$TMP2"
if ! cmp "$0" "$TMP2" >/dev/null 2>&1; then if ! cmp "$0" "$TMP2" >/dev/null 2>&1; then
@ -790,7 +814,10 @@ while true; do
stealth) cmd_name=stealth ;; stealth) cmd_name=stealth ;;
update) cmd_name=update ;; update) cmd_name=update ;;
version) cmd_name=version ;; version) cmd_name=version ;;
*) cmd_name="query"; cmd_args="$input";; *)
cmd_name="query"
cmd_args="$input"
;;
esac esac
"cmd_$cmd_name" $cmd_args "cmd_$cmd_name" $cmd_args
done done

View file

@ -1,5 +1,4 @@
#!/bin/sh #!/bin/sh
# shellcheck disable=2154
term= term=
[ -n "$SCRATCHPAD" ] && { [ -n "$SCRATCHPAD" ] && {

View file

@ -1,5 +1,4 @@
#!/bin/sh #!/bin/sh
# shellcheck disable=2089,2090
year=$1 year=$1
month=$2 month=$2