96 lines
1.6 KiB
Bash
96 lines
1.6 KiB
Bash
|
#!/bin/bash
|
||
|
source $(dirname $0)/io.sh || exit 255
|
||
|
|
||
|
########################################################
|
||
|
# Little handy helpers for scripting
|
||
|
########################################################
|
||
|
|
||
|
# convert relative path $1 to full one
|
||
|
abspath() {
|
||
|
echo $(realpath -q "${1/#\~/$HOME}")
|
||
|
}
|
||
|
|
||
|
# check if path $1 is writable
|
||
|
is_writable() {
|
||
|
[ -w "$(abspath $1)" ]
|
||
|
}
|
||
|
|
||
|
# check if path $1 is a directory
|
||
|
is_dir() {
|
||
|
[ -d "$(abspath $1)" ]
|
||
|
}
|
||
|
|
||
|
# check if path $1 is a file
|
||
|
is_file() {
|
||
|
[ -f "$(abspath $1)" ]
|
||
|
}
|
||
|
|
||
|
# check if an argument is a shell function
|
||
|
is_function() {
|
||
|
declare -F "$1" > /dev/null
|
||
|
}
|
||
|
|
||
|
# check if string $1 matches regex $2
|
||
|
regex_match() {
|
||
|
printf "%s" "$1" | grep -qP "$2"
|
||
|
}
|
||
|
|
||
|
# check if array $2 contains string $1
|
||
|
in_array() {
|
||
|
local find=$1
|
||
|
shift
|
||
|
for e in "$@"; do
|
||
|
[[ "$e" == "$find" ]] && return 0
|
||
|
done
|
||
|
return 1
|
||
|
}
|
||
|
|
||
|
# join all elements of array $2 with delimiter $1
|
||
|
implode() {
|
||
|
local d=${1-}
|
||
|
local f=${2-}
|
||
|
if shift 2; then
|
||
|
printf %s "$f" "${@/#/$d}"
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
# open url $1 in system web-browser
|
||
|
open_url() {
|
||
|
if which xdg-open > /dev/null; then
|
||
|
xdg-open "$1" </dev/null >/dev/null 2>&1 & disown
|
||
|
elif which gnome-open > /dev/null; then
|
||
|
gnome-open "$1" </dev/null >/dev/null 2>&1 & disown
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
# unpack .tar.gz file $1 into path $2
|
||
|
unpack_targz() {
|
||
|
require tar
|
||
|
tar -xzf "$1" -C "$2"
|
||
|
}
|
||
|
|
||
|
# make soft symbolic link of path $1 to path $2
|
||
|
symlink() {
|
||
|
ln -sf "$1" "$2"
|
||
|
}
|
||
|
|
||
|
# download file $1 into path $2 using wget
|
||
|
download() {
|
||
|
require wget
|
||
|
wget "$1" -O "$2"
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|