aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/%HOME%/.bash_utils
diff options
context:
space:
mode:
Diffstat (limited to '%HOME%/.bash_utils')
-rw-r--r--%HOME%/.bash_utils/cxx.sh14
-rw-r--r--%HOME%/.bash_utils/distr.sh3
-rw-r--r--%HOME%/.bash_utils/file.sh4
-rw-r--r--%HOME%/.bash_utils/text.sh89
4 files changed, 64 insertions, 46 deletions
diff --git a/%HOME%/.bash_utils/cxx.sh b/%HOME%/.bash_utils/cxx.sh
index 4e332e7..633e154 100644
--- a/%HOME%/.bash_utils/cxx.sh
+++ b/%HOME%/.bash_utils/cxx.sh
@@ -25,12 +25,15 @@ runcxx_compiler=g++
_runc_usage() (
set -o errexit -o nounset -o pipefail
+ local prefix="${FUNCNAME[0]}"
+ [ "${#FUNCNAME[@]}" -gt 1 ] && prefix="${FUNCNAME[1]}"
+
local msg
for msg; do
- echo "${FUNCNAME[1]}: $msg"
+ echo "$prefix: $msg"
done
- echo "usage: ${FUNCNAME[1]} [-h|--help] [-c|--comp-arg ARG]... C_PATH... [-- [PROG_ARG]...]"
+ echo "usage: $prefix [-h|--help] [-c|--comp-arg ARG]... C_PATH... [-- [PROG_ARG]...]"
)
runc() (
@@ -103,12 +106,15 @@ runc() (
_runcxx_usage() (
set -o errexit -o nounset -o pipefail
+ local prefix="${FUNCNAME[0]}"
+ [ "${#FUNCNAME[@]}" -gt 1 ] && prefix="${FUNCNAME[1]}"
+
local msg
for msg; do
- echo "${FUNCNAME[1]}: $msg"
+ echo "$prefix: $msg"
done
- echo "usage: ${FUNCNAME[1]} [-h|--help] [-c|--comp-arg ARG]... CPP_PATH... [-- [PROG_ARG]...]"
+ echo "usage: $prefix [-h|--help] [-c|--comp-arg ARG]... CPP_PATH... [-- [PROG_ARG]...]"
)
runcxx() (
diff --git a/%HOME%/.bash_utils/distr.sh b/%HOME%/.bash_utils/distr.sh
index ff32c0a..810783e 100644
--- a/%HOME%/.bash_utils/distr.sh
+++ b/%HOME%/.bash_utils/distr.sh
@@ -9,10 +9,13 @@ sums_path='sha1sums.txt'
sums_name="$( basename -- "$sums_path" )"
sums_unescape_path() {
+ set -o errexit -o nounset -o pipefail
+
if [ "$#" -ne 1 ]; then
echo "usage: ${FUNCNAME[0]} PATH" >&2
return 1
fi
+
local path="$1"
path="${path//'\\'/$'\\'}"
path="${path//'\n'/$'\n'}"
diff --git a/%HOME%/.bash_utils/file.sh b/%HOME%/.bash_utils/file.sh
index 6034713..6df20d0 100644
--- a/%HOME%/.bash_utils/file.sh
+++ b/%HOME%/.bash_utils/file.sh
@@ -17,12 +17,12 @@ swap_files() (
local path2="$2"
if [ ! -r "$path1" ] || [ ! -w "$path1" ]; then
- echo "${FUNCNAME[0]}: must be a regular file: $path1" >&2
+ echo "${FUNCNAME[0]}: must be readable and writable: $path1" >&2
return 1
fi
if [ ! -r "$path2" ] || [ ! -w "$path2" ]; then
- echo "${FUNCNAME[0]}: must be a regular file: $path2" >&2
+ echo "${FUNCNAME[0]}: must be readable and writable: $path2" >&2
return 1
fi
diff --git a/%HOME%/.bash_utils/text.sh b/%HOME%/.bash_utils/text.sh
index 0f51b4a..be197e1 100644
--- a/%HOME%/.bash_utils/text.sh
+++ b/%HOME%/.bash_utils/text.sh
@@ -26,37 +26,43 @@ doslint() {
trim "$@" && trimdoseol "$@" && doseol "$@"
}
-escape_pattern_sed() (
+_sed_escape_pattern() (
set -o errexit -o nounset -o pipefail
+ if [ "$#" -ne 1 ]; then
+ echo "usage: ${FUNCNAME[0]} STR" >&2
+ return 1
+ fi
+
# Only $^*./\[] need to be escaped according to this:
# https://unix.stackexchange.com/a/33005/60124
- local pattern
- for pattern; do
- pattern="${pattern//'\'/'\\'}"
- pattern="${pattern//'/'/'\/'}"
- pattern="${pattern//'$'/'\$'}"
- pattern="${pattern//'^'/'\^'}"
- pattern="${pattern//'*'/'\*'}"
- pattern="${pattern//'.'/'\.'}"
- pattern="${pattern//'['/'\['}"
- pattern="${pattern//']'/'\]'}"
- pattern="${pattern//$'\n'/'\n'}"
- echo "$pattern"
- done
+ local s="$1"
+ s="${s//'\'/'\\'}"
+ s="${s//'/'/'\/'}"
+ s="${s//'$'/'\$'}"
+ s="${s//'^'/'\^'}"
+ s="${s//'*'/'\*'}"
+ s="${s//'.'/'\.'}"
+ s="${s//'['/'\['}"
+ s="${s//']'/'\]'}"
+ s="${s//$'\n'/'\n'}"
+ echo "$s"
)
-escape_substitution_sed() (
+_sed_escape_substitution() (
set -o errexit -o nounset -o pipefail
- local pattern
- for pattern; do
- pattern="${pattern//'\'/'\\'}"
- pattern="${pattern//'/'/'\/'}"
- pattern="${pattern//'&'/'\&'}"
- pattern="${pattern//$'\n'/'\n'}"
- echo "$pattern"
- done
+ if [ "$#" -ne 1 ]; then
+ echo "usage: ${FUNCNAME[0]} STR" >&2
+ return 1
+ fi
+
+ local s="$1"
+ s="${s//'\'/'\\'}"
+ s="${s//'/'/'\/'}"
+ s="${s//'&'/'\&'}"
+ s="${s//$'\n'/'\n'}"
+ echo "$s"
)
str_replace() (
@@ -68,10 +74,10 @@ str_replace() (
fi
local old="$1"
- old="$( escape_pattern_sed "$old" )"
+ old="$( _sed_escape_pattern "$old" )"
shift
local new="$1"
- new="$( escape_substitution_sed "$new" )"
+ new="$( _sed_escape_substitution "$new" )"
shift
sed --binary --in-place -- "s/$old/$new/g" "$@"
@@ -86,10 +92,10 @@ str_replace_word() (
fi
local old="$1"
- old="$( escape_pattern_sed "$old" )"
+ old="$( _sed_escape_pattern "$old" )"
shift
local new="$1"
- new="$( escape_substitution_sed "$new" )"
+ new="$( _sed_escape_substitution "$new" )"
shift
sed --binary --in-place -- "s/\\b$old\\b/$new/g" "$@"
@@ -113,20 +119,23 @@ str_toupper() (
done
)
-escape_pattern_bash() (
+_bash_escape_pattern() (
set -o errexit -o nounset -o pipefail
+ if [ "$#" -ne 1 ]; then
+ echo "usage: ${FUNCNAME[0]} STR" >&2
+ return 1
+ fi
+
# Only *?\[] need to be escaped according to:
# http://wiki.bash-hackers.org/syntax/pattern#normal_pattern_language
- local pattern
- for pattern; do
- pattern="${pattern//'\'/'\\'}"
- pattern="${pattern//'*'/'\*'}"
- pattern="${pattern//'?'/'\?'}"
- pattern="${pattern//'['/'\['}"
- pattern="${pattern//']'/'\]'}"
- echo "$pattern"
- done
+ local s="$1"
+ s="${s//'\'/'\\'}"
+ s="${s//'*'/'\*'}"
+ s="${s//'?'/'\?'}"
+ s="${s//'['/'\['}"
+ s="${s//']'/'\]'}"
+ echo "$s"
)
str_contains() (
@@ -141,7 +150,7 @@ str_contains() (
local sub="$2"
[ -z "$sub" ] && return 0
- sub="$( escape_pattern_bash "$sub" )"
+ sub="$( _bash_escape_pattern "$sub" )"
test "$str" != "${str#*$sub}"
)
@@ -158,7 +167,7 @@ str_starts_with() (
local sub="$2"
[ -z "$sub" ] && return 0
- sub="$( escape_pattern_bash "$sub" )"
+ sub="$( _bash_escape_pattern "$sub" )"
test "$str" != "${str#$sub}"
)
@@ -175,7 +184,7 @@ str_ends_with() (
local sub="$2"
[ -z "$sub" ] && return 0
- sub="$( escape_pattern_bash "$sub" )"
+ sub="$( _bash_escape_pattern "$sub" )"
test "$str" != "${str%$sub}"
)