From: Andre Noll Date: Sat, 27 Sep 2014 23:00:45 +0000 (+0000) Subject: Merge branch 't/kill_pointless_subshell' X-Git-Url: http://git.tuebingen.mpg.de/?p=gsu.git;a=commitdiff_plain;h=521b9d7584ff363b9af24f33e0afb1e954da854a;hp=96dedb2c454e93e307a45721b202f304c9464a2b Merge branch 't/kill_pointless_subshell' Cooking for almost a month. * t/kill_pointless_subshell: subcommand: Overhaul _gsu_print_available_commands(). --- diff --git a/common b/common index bd8276b..eaa5751 100644 --- a/common +++ b/common @@ -35,7 +35,7 @@ EOF gsu_is_a_number() { result="$1" - if test "$1" -eq "$1" &> /dev/null; then + if (("$1" == "$1")) &> /dev/null; then ret=$GSU_SUCCESS else ret=-$E_GSU_NOT_A_NUMBER @@ -49,12 +49,12 @@ gsu_short_msg() gsu_msg() { - gsu_short_msg "$_gsu_self: $1" + gsu_short_msg "$gsu_name: $1" } gsu_date_msg() { - gsu_short_msg "$_gsu_self $(date): $1" + gsu_short_msg "$gsu_name $(date): $1" } gsu_err_msg() @@ -62,11 +62,11 @@ gsu_err_msg() local txt="$result" err gsu_is_a_number "$ret" - if test $ret -lt 0; then + if (($ret < 0)); then gsu_msg "unknown error ($ret:$txt)" exit 1 fi - if test $result -ge 0; then + if (($result >= 0)); then gsu_msg "unknown error ($result:$txt)" exit 1 fi @@ -81,8 +81,7 @@ gsu_err_msg() _gsu_setup() { - _gsu_self="$(basename $0)" - gsu_name="${gsu_name:=$_gsu_self}" + gsu_name="${gsu_name:-${0##*/}}" gsu_config_var_prefix="${gsu_config_var_prefix:=$gsu_name}" gsu_banner_txt="${gsu_banner_txt:-set \$gsu_banner_txt to customize this message}" _gsu_init_errors diff --git a/config b/config index 09330f3..0663e34 100644 --- a/config +++ b/config @@ -27,7 +27,7 @@ gsu_check_options() result="name: '$name'" # bash's =~ works only for 3.2 and newer, so use grep echo "$name" | grep '^[a-zA-Z][a-zA-Z_0123456789]*$' &> /dev/null; - [[ $? -ne 0 ]] && return + (($? != 0)) && return eval orig_val='"'\$orig_${gsu_config_var_prefix}_$name'"' if [[ -z "$orig_val" ]]; then @@ -57,7 +57,7 @@ gsu_check_options() ;; num) gsu_is_a_number "$val" - [[ $ret -lt 0 ]] && return + (($ret < 0)) && return ;; *) ret=-$E_GSU_BAD_OPTION_TYPE @@ -79,7 +79,7 @@ gsu_check_options_or_die() } if [[ "$(type -t _gsu_setup)" != "function" ]]; then - gsu_dir=${gsu_dir:=${HOME:-}/.gsu} + gsu_dir=${gsu_dir:-${BASH_SOURCE[0]%/*}} . $gsu_dir/common || exit 1 _gsu_setup fi diff --git a/gui b/gui index eb9f29f..72717a1 100644 --- a/gui +++ b/gui @@ -1,8 +1,9 @@ #!/bin/bash -if [[ $(type -t gsu_is_a_number) != "function" ]]; then - GSU_DIR=${GSU_DIR:=${HOME:-}/.gsu} - . $GSU_DIR/common || exit 1 +if [[ "$(type -t _gsu_setup)" != "function" ]]; then + gsu_dir=${gsu_dir:-${BASH_SOURCE[0]%/*}} + . $gsu_dir/common || exit 1 + _gsu_setup fi export GSU_NODE_NAME_PATTERN='[a-zA-Z_]' @@ -200,7 +201,6 @@ gsu_gui() { local tree="$1" subtree - _gsu_setup type -t dialog &> /dev/null if (($? != 0)); then gsu_msg "dialog executable not found" diff --git a/subcommand b/subcommand index f668f2a..bded36d 100644 --- a/subcommand +++ b/subcommand @@ -1,14 +1,15 @@ #!/bin/bash # (C) 2006-2011 Andre Noll -if [[ $(type -t gsu_is_a_number) != "function" ]]; then - GSU_DIR=${GSU_DIR:=${HOME-}/.gsu} - . $GSU_DIR/common || exit 1 +if [[ "$(type -t _gsu_setup)" != "function" ]]; then + gsu_dir=${gsu_dir:-${BASH_SOURCE[0]%/*}} + . $gsu_dir/common || exit 1 + _gsu_setup fi _gsu_usage() { - gsu_short_msg "# Usage: $_gsu_self command [options]" + gsu_short_msg "# Usage: $gsu_name command [options]" } # Return an extended regular expression to match against $0. @@ -109,11 +110,11 @@ _com_prefs() ret=-$E_GSU_MKDIR result="${conf%/*}" mkdir -p "$result" - [[ $? -ne 0 ]] && return + (($? != 0)) && return ret=-$E_GSU_EDITOR result="${EDITOR:-vi}" "$result" "$conf" - [[ $? -ne 0 ]] && return + (($? != 0)) && return ret=$GSU_SUCCESS return fi @@ -159,15 +160,15 @@ _com_man() local minus_signs="--------------------------------------------------" local com num - echo "$_gsu_self (_${gsu_banner_txt}_) manual" - echo "${equal_signs:0:${#_gsu_self} + ${#gsu_banner_txt} + 16}" + echo "$gsu_name (_${gsu_banner_txt}_) manual" + echo "${equal_signs:0:${#gsu_name} + ${#gsu_banner_txt} + 16}" echo sed -e '1,/^#\{70,\}/d' -e '/^#\{70,\}/,$d' $0 -e 's/^# *//' echo "----" echo - echo "$_gsu_self usage" - echo "${minus_signs:0:${#_gsu_self} + 6}" + echo "$gsu_name usage" + echo "${minus_signs:0:${#gsu_name} + 6}" printf "\t" _gsu_usage 2>&1 echo "Each command has its own set of options as described below." @@ -179,9 +180,7 @@ _com_man() _gsu_available_commands for com in $result; do num=${#com} - if test $num -lt 4; then - num=4 - fi + (($num < 4)) && num=4 echo "${minus_signs:0:$num}" echo "$com" echo "${minus_signs:0:$num}" @@ -191,11 +190,6 @@ _com_man() ret=$GSU_SUCCESS } -_gsu_banner_msg() -{ - gsu_short_msg "### $_gsu_self -- ###" -} - export gsu_help_txt=" Print online help. @@ -226,7 +220,7 @@ _com_help() ere="$result" if (($# == 0)); then - _gsu_banner_msg 2>&1 + gsu_short_msg "### $gsu_name -- $gsu_banner_txt ###" _gsu_usage 2>&1 { printf "com_help()\n$gsu_help_txt" | head -n 4; echo "--" @@ -256,7 +250,7 @@ _com_help() # and print the sucker p' echo - echo "# Try $_gsu_self help for info on ." + echo "# Try $gsu_name help for info on ." ret=$GSU_SUCCESS return fi @@ -336,7 +330,7 @@ gsu_getopts() ' gsu_check_arg_count $# 1 1 - if [[ $ret -lt 0 ]]; then + if (($ret < 0)); then gsu_err_msg exit 1 fi @@ -530,10 +524,9 @@ gsu_get_unnamed_arg_num() gsu() { local i - _gsu_setup _gsu_available_commands gsu_cmds="$result" - if test $# -eq 0; then + if (($# == 0)); then _gsu_usage _gsu_print_available_commands exit 1 @@ -543,7 +536,7 @@ gsu() # check internal commands if [[ "$arg" = "help" || "$arg" = "man" || "$arg" = "prefs" || "$arg" = "complete" ]]; then _com_$arg "$@" - if [[ "$ret" -lt 0 ]]; then + if (("$ret" < 0)); then gsu_err_msg exit 1 fi @@ -554,7 +547,7 @@ gsu() for i in $gsu_cmds; do if test "$arg" = "$i"; then com_$arg "$@" - if [[ "$ret" -lt 0 ]]; then + if (("$ret" < 0)); then gsu_err_msg exit 1 fi @@ -585,16 +578,16 @@ gsu() gsu_check_arg_count() { ret=-$E_GSU_BAD_ARG_COUNT - if [[ $# -eq 2 ]]; then # only num1 is given + if (($# == 2)); then # only num1 is given result="at least $2 args required, $1 given" - [[ $1 -lt $2 ]] && return + (($1 < $2)) && return ret=$GSU_SUCCESS return fi # num1 and num2 given result="need at least $2 args, $1 given" - [[ $1 -lt $2 ]] && return + (($1 < $2)) && return result="need at most $3 args, $1 given" - [[ $1 -gt $3 ]] && return + (($1 > $3)) && return ret=$GSU_SUCCESS }