Bash/Functions
Bash also supports functions. Add the functions to ~/.bashrc, or a separate file which is sourced from ~/.bashrc. More Bash function examples can be found in BBS#30155.
Display error codes
To set trap to intercept a non-zero return code of the last program run:
EC() {
echo -e '\e[1;33m'code $?'\e[m\n'
}
trap EC ERR
Compile and execute a C source on the fly
The following function will compile (within the /tmp/ directory) and execute the C source argument on the fly (and the execution will be without arguments). And finally, after program terminates, will remove the compiled file.
# Compile and execute a C source on the fly
csource() {
[[ $1 ]] || { echo "Missing operand" >&2; return 1; }
[[ -r $1 ]] || { printf "File %s does not exist or is not readable\n" "$1" >&2; return 1; }
local output_path=${TMPDIR:-/tmp}/${1##*/};
gcc "$1" -o "$output_path" && "$output_path";
rm "$output_path";
return 0;
}
Extract
The following function will extract a wide range of compressed file types. Use it with the syntax extract <file1> <file2> ...
extract() {
local c e i
(($#)) || return
for i; do
c=''
e=1
if [[ ! -r $i ]]; then
echo "$0: file is unreadable: \`$i'" >&2
continue
fi
case $i in
*.t@(gz|lz|xz|b@(2|z?(2))|a@(z|r?(.@(Z|bz?(2)|gz|lzma|xz)))))
c=(bsdtar xvf);;
*.7z) c=(7z x);;
*.Z) c=(uncompress);;
*.bz2) c=(bunzip2);;
*.exe) c=(cabextract);;
*.gz) c=(gunzip);;
*.rar) c=(unrar x);;
*.xz) c=(unxz);;
*.zip) c=(unzip);;
*.zst) c=(unzstd);;
*) echo "$0: unrecognized file extension: \`$i'" >&2
continue;;
esac
command "${c[@]}" "$i"
((e = e || $?))
done
return "$e"
}
extglob is enabled: shopt -s extglob, by adding it to the ~/.bashrc (see gregswiki:glob#Options which change globbing behavior).Another way to do this is to install a specialized package, see Archiving and compression tools#Convenience tools.
cd and ls in one
Very often changing to a directory is followed by the ls command to list its contents. Therefore it is helpful to have a second function doing both at once.
In this example we will name it cl (change list) and show an error message if the specified directory does not exist.
cl() {
local dir="$1"
local dir="${dir:=$HOME}"
if [[ -d "$dir" ]]; then
cd "$dir" >/dev/null; ls
else
echo "bash: cl: $dir: Directory not found"
fi
}
Of course the ls command can be altered to fit your needs, for example ls -hall --color=auto.
Simple task utility
Inspired by #Simple note taker
Calculator
calc() {
echo "scale=3;$@" | bc -l
}
Kingbash
Kingbash - menu driven auto-completion (see BBS#101010).
Install from the AUR, then insert the following into your ~/.bashrc:
IP info
Detailed information on an IP address or hostname in bash via https://ipinfo.io:
ipif() {
if grep -P "(([1-9]\d{0,2})\.){3}(?2)" <<< "$1"; then
curl ipinfo.io/"$1"
else
ipawk=($(host "$1" | awk '/address/ { print $NF }'))
curl ipinfo.io/${ipawk[1]}
fi
echo
}