dotfiles/sub/bash/functions
2022-05-23 21:38:36 +03:00

154 lines
3.5 KiB
Plaintext

destroy() {
test -n "$1" || return 1
test -e "$1" || return 1
echo -n "Sure want to destroy file '$1' with size $(du -hs "$1" | awk '{printf $1}') [y/N] "
read -r response
[[ $response == [yY] ]] && shred -zun 25 "$1"
}
lsl () {
local DIR
DIR="$1"
if [ -z "$1" ]; then
DIR="$(pwd)"
fi
ls -lhFA --color=always "${DIR}" | tail -n +2 | less -R
}
workon() {
local ENV_NAME
ENV_NAME="$1"
if [ -z "$1" ]; then
ENV_NAME=$(basename "$(pwd)")
fi
source /opt/pythonenv/"$ENV_NAME"/bin/activate
}
cl() {
local DIR
DIR="$*"
if [ $# -lt 1 ]; then
DIR="$HOME"
fi
cd "${DIR}" && ls -F --color=auto
}
va() {
local activate_venv
if [ -f "./venv/bin/activate" ]; then
source "./venv/bin/activate"
return 0
fi
activate_venv="$(find -P . -maxdepth 3 -type f -wholename '*/bin/activate' | sort | head -n 1)"
if [ -n "$activate_venv" ]; then
source "$activate_venv"
return 0
else
echo "va: error: virtual environment not found, use python3 -m virtualenv venv" >&2
return 1
fi
}
extract () {
if [ -z "$1" ]; then # if string non-zero
# display usage if no parameters given
echo "extract: error: usage: extract <path/file_name>.<zip|rar|bz2|gz|tar|tbz2|tgz|Z|7z|xz|ex|tar.bz2|tar.gz|tar.xz>"
return 2
fi
if ! [ -f "$1" ]; then # if file not exist
echo "extract: error: '$1' file does not exist" >&2
return 1
fi
local NAME
NAME=${1%%.*} # removes extension from filename
if [ -e "$NAME" ]; then
echo "extract: error: '$NAME' exists" >&2
return 1
fi
mkdir "$NAME" && cd "$NAME" || return 1
case $1 in
*.tar.bz2) tar xjf ../"$1" ;;
*.tar.gz) tar xzf ../"$1" ;;
*.tar.xz) tar xJf ../"$1" ;;
*.lzma) unlzma ../"$1" ;;
*.bz2) bunzip2 ../"$1" ;;
*.rar) unrar x -ad ../"$1" ;;
*.gz) gunzip ../"$1" ;;
*.tar) tar xf ../"$1" ;;
*.tbz2) tar xjf ../"$1" ;;
*.tgz) tar xzf ../"$1" ;;
*.zip) unzip ../"$1" ;;
*.Z) uncompress ../"$1" ;;
*.7z) 7z x ../"$1" ;;
*.xz) unxz ../"$1" ;;
*.exe) cabextract ../"$1" ;;
*) echo "extract: error: '$1' - unknown archive method" >&2 ;;
esac
cd ..
}
mcd () {
mkdir -p "$1" && cd "$1" || return
}
# Syntax-highlight JSON strings or files
# Usage: `json '{"foo":42}'` or `echo '{"foo":42}' | json`
json() {
if [ -t 0 ]; then # argument
python -m json.tool <<< "$*" | pygmentize -l javascript
else # pipe
python -m json.tool | pygmentize -l javascript
fi
}
# docker
# execute bash shell in running container
docker_ex() {
docker exec -it $1 ${2:-bash}
}
# ips of docker containers
docker_ips() {
local DOC IP OUT NAME PORT
for DOC in $(docker ps -q | tr '\n' ' ')
do
IP="$(docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$DOC" 2>/dev/null)"
PORT="$(docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}}{{(index $conf 0).HostPort}}{{end}}' "$DOC" 2>/dev/null)"
NAME="$(docker inspect --format='{{.Name}}' "$DOC" 2>/dev/null)"
OUT+="${NAME#"/"}"'\t'"$IP":"$PORT"'\n'
done
echo -e $OUT 2>/dev/null | column -t
}
py() {
test -z "$@" && ipython -i -c "q = exit" || python3 $@
}