From 71e1d87d323d899c52c3ad3dbe291b1e57bf16a5 Mon Sep 17 00:00:00 2001 From: ge Date: Thu, 29 Sep 2022 10:47:48 +0300 Subject: [PATCH] feat: Improve and make scripts POSIX compliant --- Upload to imgs | 44 +++++++++----------- imgs | 106 ++++++++++++++++++++++++------------------------- 2 files changed, 72 insertions(+), 78 deletions(-) diff --git a/Upload to imgs b/Upload to imgs index 961860c..842fb81 100755 --- a/Upload to imgs +++ b/Upload to imgs @@ -1,38 +1,32 @@ -#!/usr/bin/env bash -# This is an imgs "integration" for Nautilus. +#!/bin/sh +# This is an imgs https://git.nxhs.cloud/ge/imgs "integration" for Nautilus. # Place this script into path: $HOME/.local/share/nautilus/scripts # See more info at: -imgs_check_vars() { - [ "$IMGSLOG" ] || IMGSLOG=$HOME/imgs_debug.log - [ "$IMGSREMOTE" ] && return 0 # exit from func if variable is set +IMGSLOG="${IMGSLOG:-$HOME/imgs_debug.log}" +[ -n "$IMGSREMOTE" ] && return 0 # exit from func if variable is set - if [ -f "$HOME/.imgsremote" ]; then - . $HOME/.imgsremote - fi +if [ -f "$HOME"/.imgsremote ]; then + # shellcheck source=/dev/null + . "$HOME"/.imgsremote +fi - if [ "$IMGSREMOTE" ]; then - : - else - echo "$0: Error: IMGSREMOTE variable is not set." >&2 - exit 1 - fi -} +if [ -z "$IMGSREMOTE" ]; then + echo "$0: Error: IMGSREMOTE variable is not set." >&2; exit 1 +fi -imgs_check_vars +[ -n "$IMGSDEBUG" ] && date +"[%d %b %Y %H:%M:%S] Started" >> "$IMGSLOG" -[ "$IMGSDEBUG" ] && date +"[%d %b %Y %H:%M:%S] Started" >> "$IMGSLOG" - -while read -r file; do - [ "$file" ] || break - if [ "$IMGSDEBUG" ]; then +echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | while read -r file; do + [ -z "$file" ] && break + if [ -n "$IMGSDEBUG" ]; then image="$(curl -v -L -F "image=@$file" "$IMGSREMOTE" 2>&1 | tee -a "$IMGSLOG")" - image="$(tail -n 1 <<< "$image")" + image="$(echo "$image" | tail -n 1)" else image="$(curl -L -F "image=@$file" "$IMGSREMOTE")" fi - [ "$IMGSDEBUG" ] && echo "$(date +"[%d %b %Y %H:%M:%S]") $file --> $image" >> "$IMGSLOG" + [ -n "$IMGSDEBUG" ] && echo "$(date +"[%d %b %Y %H:%M:%S]") $file --> $image" >> "$IMGSLOG" notify-send "File uploaded to imgs!" "$image" -done <<< "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" +done -[ "$IMGSDEBUG" ] && date +"[%d %b %Y %H:%M:%S] Finished" >> "$IMGSLOG" +[ -n "$IMGSDEBUG" ] && date +"[%d %b %Y %H:%M:%S] Finished" >> "$IMGSLOG" diff --git a/imgs b/imgs index 3ddd3a2..6c1e3bf 100755 --- a/imgs +++ b/imgs @@ -1,74 +1,74 @@ -#!/usr/bin/env bash -# imgs CLI client. -# Home page: +#!/bin/sh +# imgs CLI https://git.nxhs.cloud/ge/imgs imgs_usage() { - cat <<- EOF - Upload images to remote imgs server. +cat <<- EOF +Upload images to remote imgs server. - Usage: imgs [--version] [--help] [-r | --remote ] ... +Usage: imgs [-rvh] ... - Options: - -r, --remote remote imgs instance URI. Example: - 'https://user:password@example.org' - --version print version and exit. - --help print this help message and exit. +Options: + -r, --remote remote imgs instance URI e.g. https://user:password@example.org + -v, --version print version and exit. + -h, --help print this help message and exit. - Environment variables: - IMGSREMOTE remote imgs instance URI. - IMGSDEBUG enables verbose mode and logging. - IMGSLOG path to logfile. Default: ~/imgs_debug.log +Environment variables: + IMGSREMOTE remote imgs instance URI. + IMGSDEBUG enables verbose mode and logging. + IMGSLOG path to logfile. Default: ~/imgs_debug.log - You can set variables in ~/.imgsremote file instead of ~/.bashrc - See for more info. - EOF - exit 0 +You can set variables in ~/.imgsremote file instead of ~/.bashrc +See for more info. +EOF } -imgs_check_vars() { - [ "$IMGSLOG" ] || IMGSLOG=$HOME/imgs_debug.log - [ "$IMGSREMOTE" ] && return 0 # exit from func if variable is set +[ "$#" -eq 0 ] && { imgs_usage; exit 1; } - if [ -f "$HOME/.imgsremote" ]; then - . $HOME/.imgsremote - fi - - if [ "$IMGSREMOTE" ]; then - : - else - echo "$0: Error: IMGSREMOTE variable is not set." >&2 - exit 1 - fi -} - -[[ "$@" ]] || imgs_usage -while (( "$#" )); do - case "$1" in - -r|--remote) if [ "$2" ] && [ "${2:0:1}" != '-' ]; then - IMGSREMOTE="$2"; shift - else - echo "$0: missing argument for $1" >&2; exit 1 - fi; shift;; - --version) echo 'imgs CLI 1.0'; exit 0;; - --help) imgs_usage;; - -*) echo "$0: $1: bad option" >&2; exit 1;; - *) [ -f "$1" ] || { echo "$0: $1: no such file" >&2; exit 1; } - _files+=("$1"); shift;; +# Transform long options to short ones +for arg in "$@"; do + shift + case "$arg" in + --remote) set -- "$@" "-r";; + --help) set -- "$@" "-h";; + --version) set -- "$@" "-v";; + *) set -- "$@" "$arg";; esac done -imgs_check_vars +while getopts r:vh OPT; do + case "$OPT" in + r) IMGSREMOTE="$OPTARG";; + v) echo 'imgs CLI 1.1'; exit 0;; + h) imgs_usage; exit 0;; + *) echo "$0: Unknown option: $OPT" >&2; exit 1;; + esac +done -[ "$IMGSDEBUG" ] && date +"[%d %b %Y %H:%M:%S] Started" | tee -a "$IMGSLOG" +shift $((OPTIND - 1)) # shift for parse positional args -for file in "${_files[@]}"; do +# Check variables +IMGSLOG="${IMGSLOG:-$HOME/imgs_debug.log}" +[ -n "$IMGSREMOTE" ] && return 0 # exit from func if variable is set + +if [ -f "$HOME"/.imgsremote ]; then + # shellcheck source=/dev/null + . "$HOME"/.imgsremote +fi + +if [ -z "$IMGSREMOTE" ]; then + echo "$0: Error: IMGSREMOTE variable is not set." >&2; exit 1 +fi + +[ -n "$IMGSDEBUG" ] && date +"[%d %b %Y %H:%M:%S] Started" | tee -a "$IMGSLOG" + +for file in "$@"; do filepath="$(realpath "$file")" - if [ "$IMGSDEBUG" ]; then - echo "Uploading $filepath" | tee -a "$IMGSLOG" + if [ -n "$IMGSDEBUG" ]; then + echo "Uploading $filepath ..." | tee -a "$IMGSLOG" curl -v -L -F "image=@/$filepath" "$IMGSREMOTE" 2>&1 | tee -a "$IMGSLOG" else curl -L -F "image=@/$filepath" "$IMGSREMOTE" fi done -[ "$IMGSDEBUG" ] && date +"[%d %b %Y %H:%M:%S] Finished" | tee -a "$IMGSLOG" +[ -n "$IMGSDEBUG" ] && date +"[%d %b %Y %H:%M:%S] Finished" | tee -a "$IMGSLOG"