plugin/base: improvements (#1930)
* plugins/base: code style improvements Quote variables, use $@ and $array[@] instead of $*, typeset some integers, remove unneccesasary binary invocation, use shell features when possible, remove `eval`, &c. * plugins/base: conditional function definitions Instead of functions failing when required tools aren't installed, just don't define the function. Alsö, don't redefine del() if it already exists. * plugins/base: rewrite `usage()` Reimplement disk usage function using Bash syntax and simpler layout, without having to invoke an external binary. * plugins/base: revamp `quiet()` New implementation that is even quieter. * plugins/base: `myip()` * plugins/base: `pickfrom()` * plugins/base: `passgen()` Fix `passgen()` to not need `tr`, remove one subshell, and eliminate a useless `echo`. * plugins/base: `mkcd()` * plugins/base: `mkiso()` * plugins/base: remove `banish-cookies()` Adobe Flash is gone with the wind. Alsö, this would be something someone would do *once* and shouldn't be a function... * plugins/base: `lsgrep` is SC2010 The `lsgrep()` function is *itself* explicitly forbidden by `shellcheck` rule SC2010. Alsö, s/`$*`/`$@` * plugins/base: `mkiso()` Expressly handle unbound parameters. * plugins/base: remove `command_exists` * plugin/base: lint SC2154 && SC2144 Newly undisabled `shellcheck` rules * plugin/base: import libs for tests * plugin/base: `shfmt` Apply `shfmt` using current project settings. My apologies to future `git blame` hunters. ♥pull/1885/head
parent
127cbbd4e3
commit
c2c76a380a
|
|
@ -79,6 +79,7 @@ completion/available/wpscan.completion.bash
|
|||
#
|
||||
plugins/available/alias-completion.plugin.bash
|
||||
plugins/available/autojump.plugin.bash
|
||||
plugins/available/base.plugin.bash
|
||||
plugins/available/basher.plugin.bash
|
||||
plugins/available/cmd-returned-notify.plugin.bash
|
||||
plugins/available/direnv.plugin.bash
|
||||
|
|
|
|||
|
|
@ -1,23 +1,20 @@
|
|||
# shellcheck shell=bash
|
||||
cite about-plugin
|
||||
about-plugin 'miscellaneous tools'
|
||||
|
||||
function ips ()
|
||||
{
|
||||
function ips() {
|
||||
about 'display all ip addresses for this host'
|
||||
group 'base'
|
||||
if _command_exists ifconfig
|
||||
then
|
||||
if _command_exists ifconfig; then
|
||||
ifconfig | awk '/inet /{ gsub(/addr:/, ""); print $2 }'
|
||||
elif _command_exists ip
|
||||
then
|
||||
elif _command_exists ip; then
|
||||
ip addr | grep -oP 'inet \K[\d.]+'
|
||||
else
|
||||
echo "You don't have ifconfig or ip command installed!"
|
||||
fi
|
||||
}
|
||||
|
||||
function down4me ()
|
||||
{
|
||||
function down4me() {
|
||||
about 'checks whether a website is down for you, or everybody'
|
||||
param '1: website url'
|
||||
example '$ down4me http://www.google.com'
|
||||
|
|
@ -25,72 +22,67 @@ function down4me ()
|
|||
curl -Ls "http://downforeveryoneorjustme.com/$1" | sed '/just you/!d;s/<[^>]*>//g'
|
||||
}
|
||||
|
||||
function myip ()
|
||||
{
|
||||
function myip() {
|
||||
about 'displays your ip address, as seen by the Internet'
|
||||
group 'base'
|
||||
list=("http://myip.dnsomatic.com/" "http://checkip.dyndns.com/" "http://checkip.dyndns.org/")
|
||||
for url in ${list[*]}
|
||||
do
|
||||
res=$(curl -fs "${url}")
|
||||
if [[ $? -eq 0 ]];then
|
||||
break;
|
||||
for url in "${list[@]}"; do
|
||||
if res="$(curl -fs "${url}")"; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
res=$(echo "$res" | grep -Eo '[0-9\.]+')
|
||||
echo -e "Your public IP is: ${echo_bold_green} $res ${echo_normal}"
|
||||
res="$(echo "$res" | grep -Eo '[0-9\.]+')"
|
||||
echo -e "Your public IP is: ${echo_bold_green-} $res ${echo_normal-}"
|
||||
}
|
||||
|
||||
function pickfrom ()
|
||||
{
|
||||
function pickfrom() {
|
||||
about 'picks random line from file'
|
||||
param '1: filename'
|
||||
example '$ pickfrom /usr/share/dict/words'
|
||||
group 'base'
|
||||
local file=$1
|
||||
[[ -z "$file" ]] && reference $FUNCNAME && return
|
||||
length=$(cat $file | wc -l)
|
||||
n=$(expr $RANDOM \* $length \/ 32768 + 1)
|
||||
head -n $n $file | tail -1
|
||||
local file=${1:-}
|
||||
local -i n=0 length
|
||||
if [[ ! -r "$file" ]]; then
|
||||
reference "${FUNCNAME[0]}" && return
|
||||
fi
|
||||
length="$(wc -l < "$file")"
|
||||
n=$((RANDOM * length / 32768 + 1))
|
||||
head -n "$n" "$file" | tail -1
|
||||
}
|
||||
|
||||
function passgen ()
|
||||
{
|
||||
function passgen() {
|
||||
about 'generates random password from dictionary words'
|
||||
param 'optional integer length'
|
||||
param 'if unset, defaults to 4'
|
||||
example '$ passgen'
|
||||
example '$ passgen 6'
|
||||
group 'base'
|
||||
local i pass length=${1:-4}
|
||||
pass=$(echo $(for i in $(eval echo "{1..$length}"); do pickfrom /usr/share/dict/words; done))
|
||||
echo "With spaces (easier to memorize): $pass"
|
||||
echo "Without (use this as the password): $(echo $pass | tr -d ' ')"
|
||||
local -i i length=${1:-4}
|
||||
local pass
|
||||
# shellcheck disable=SC2034
|
||||
pass="$(for i in $(eval "echo {1..$length}"); do pickfrom /usr/share/dict/words; done)"
|
||||
echo "With spaces (easier to memorize): ${pass//$'\n'/ }"
|
||||
echo "Without spaces (easier to brute force): ${pass//$'\n'/}"
|
||||
}
|
||||
|
||||
# Create alias pass to passgen when pass isn't installed or
|
||||
# BASH_IT_LEGACY_PASS is true.
|
||||
if ! _command_exists pass || [[ "${BASH_IT_LEGACY_PASS:-}" = true ]]
|
||||
then
|
||||
if ! _command_exists pass || [[ "${BASH_IT_LEGACY_PASS:-}" = true ]]; then
|
||||
alias pass=passgen
|
||||
fi
|
||||
|
||||
function pmdown ()
|
||||
{
|
||||
if _command_exists markdown && _command_exists browser; then
|
||||
function pmdown() {
|
||||
about 'preview markdown file in a browser'
|
||||
param '1: markdown file'
|
||||
example '$ pmdown README.md'
|
||||
group 'base'
|
||||
if _command_exists markdown
|
||||
then
|
||||
markdown $1 | browser
|
||||
else
|
||||
echo "You don't have a markdown command installed!"
|
||||
fi
|
||||
}
|
||||
|
||||
function mkcd ()
|
||||
{
|
||||
markdown "${1?}" | browser
|
||||
}
|
||||
fi
|
||||
|
||||
function mkcd() {
|
||||
about 'make one or more directories and cd into the last one'
|
||||
param 'one or more directories to create'
|
||||
example '$ mkcd foo'
|
||||
|
|
@ -98,58 +90,41 @@ function mkcd ()
|
|||
example '$ mkcd foo foo1 foo2 fooN'
|
||||
example '$ mkcd /tmp/img/photos/large /tmp/img/photos/self /tmp/img/photos/Beijing'
|
||||
group 'base'
|
||||
mkdir -p -- "$@" && eval cd -- "\"\$$#\""
|
||||
mkdir -p -- "$@" && cd -- "${!#}" || return
|
||||
}
|
||||
|
||||
function lsgrep ()
|
||||
{
|
||||
# shellcheck disable=SC2010
|
||||
function lsgrep() {
|
||||
about 'search through directory contents with grep'
|
||||
group 'base'
|
||||
ls | grep "$*"
|
||||
ls | grep "$@"
|
||||
}
|
||||
|
||||
function quiet ()
|
||||
{
|
||||
function quiet() {
|
||||
about 'what *does* this do?'
|
||||
group 'base'
|
||||
$* &> /dev/null &
|
||||
nohup "$@" &> /dev/null < /dev/null &
|
||||
}
|
||||
|
||||
function banish-cookies ()
|
||||
{
|
||||
about 'redirect .adobe and .macromedia files to /dev/null'
|
||||
group 'base'
|
||||
rm -r ~/.macromedia ~/.adobe
|
||||
ln -s /dev/null ~/.adobe
|
||||
ln -s /dev/null ~/.macromedia
|
||||
}
|
||||
|
||||
function usage ()
|
||||
{
|
||||
function usage() {
|
||||
about 'disk usage per directory, in Mac OS X and Linux'
|
||||
param '1: directory name'
|
||||
group 'base'
|
||||
if [[ "$OSTYPE" == 'darwin'* ]]; then
|
||||
if [ -n "$1" ]; then
|
||||
du -hd 1 "$1"
|
||||
else
|
||||
du -hd 1
|
||||
fi
|
||||
|
||||
elif [[ "$OSTYPE" = 'linux'* ]]; then
|
||||
if [[ -n "$1" ]]; then
|
||||
du -h --max-depth=1 "$1"
|
||||
else
|
||||
du -h --max-depth=1
|
||||
fi
|
||||
fi
|
||||
case $OSTYPE in
|
||||
*'darwin'*)
|
||||
du -hd 1 "$@"
|
||||
;;
|
||||
*'linux'*)
|
||||
du -h --max-depth=1 "$@"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
if [[ ! -e "${BASH_IT}/plugins/enabled/todo.plugin.bash" ]] && [[ ! -e "${BASH_IT}/plugins/enabled/*${BASH_IT_LOAD_PRIORITY_SEPARATOR}todo.plugin.bash" ]]
|
||||
then
|
||||
# shellcheck disable=SC2144 # the glob matches only one file
|
||||
if [[ ! -e "${BASH_IT?}/plugins/enabled/todo.plugin.bash" &&
|
||||
! -e "${BASH_IT?}/plugins/enabled"/*"${BASH_IT_LOAD_PRIORITY_SEPARATOR-}todo.plugin.bash" ]]; then
|
||||
# if user has installed todo plugin, skip this...
|
||||
function t ()
|
||||
{
|
||||
function t() {
|
||||
about 'one thing todo'
|
||||
param 'if not set, display todo item'
|
||||
param '1: todo text'
|
||||
|
|
@ -161,17 +136,8 @@ then
|
|||
}
|
||||
fi
|
||||
|
||||
function command_exists ()
|
||||
{
|
||||
about 'checks for existence of a command'
|
||||
param '1: command to check'
|
||||
example '$ command_exists ls && echo exists'
|
||||
group 'base'
|
||||
type "$1" &> /dev/null ;
|
||||
}
|
||||
|
||||
mkiso ()
|
||||
{
|
||||
if _command_exists mkisofs; then
|
||||
function mkiso() {
|
||||
about 'creates iso from current dir in the parent dir (unless defined)'
|
||||
param '1: ISO name'
|
||||
param '2: dest/path'
|
||||
|
|
@ -180,37 +146,35 @@ mkiso ()
|
|||
example 'mkiso ISO-Name dest/path src/path'
|
||||
group 'base'
|
||||
|
||||
if type "mkisofs" > /dev/null; then
|
||||
[[ -z ${1+x} ]] && local isoname=${PWD##*/} || local isoname=$1
|
||||
[[ -z ${2+x} ]] && local destpath=../ || local destpath=$2
|
||||
[[ -z ${3+x} ]] && local srcpath=${PWD} || local srcpath=$3
|
||||
local isoname="${1:-${PWD##*/}}"
|
||||
local destpath="${2:-../}"
|
||||
local srcpath="${3:-${PWD}}"
|
||||
|
||||
if [[ ! -f "${destpath}${isoname}.iso" ]]; then
|
||||
if [[ ! -f "${destpath%/}/${isoname}.iso" ]]; then
|
||||
echo "writing ${isoname}.iso to ${destpath} from ${srcpath}"
|
||||
mkisofs -V ${isoname} -iso-level 3 -r -o "${destpath}${isoname}.iso" "${srcpath}"
|
||||
mkisofs -V "${isoname}" -iso-level 3 -r -o "${destpath%/}/${isoname}.iso" "${srcpath}"
|
||||
else
|
||||
echo "${destpath}${isoname}.iso already exists"
|
||||
fi
|
||||
else
|
||||
echo "mkisofs cmd does not exist, please install cdrtools"
|
||||
echo "${destpath%/}/${isoname}.iso already exists"
|
||||
fi
|
||||
}
|
||||
fi
|
||||
|
||||
# useful for administrators and configs
|
||||
function buf ()
|
||||
{
|
||||
function buf() {
|
||||
about 'back up file with timestamp'
|
||||
param 'filename'
|
||||
group 'base'
|
||||
local filename=$1
|
||||
local filetime=$(date +%Y%m%d_%H%M%S)
|
||||
local filename="${1?}" filetime
|
||||
filetime=$(date +%Y%m%d_%H%M%S)
|
||||
cp -a "${filename}" "${filename}_${filetime}"
|
||||
}
|
||||
|
||||
if ! _command_exists del; then
|
||||
function del() {
|
||||
about 'move files to hidden folder in tmp, that gets cleared on each reboot'
|
||||
param 'file or folder to be deleted'
|
||||
example 'del ./file.txt'
|
||||
group 'base'
|
||||
mkdir -p /tmp/.trash && mv "$@" /tmp/.trash;
|
||||
mkdir -p /tmp/.trash && mv "$@" /tmp/.trash
|
||||
}
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -5,11 +5,11 @@ load "${BASH_IT}/vendor/github.com/erichs/composure/composure.sh"
|
|||
load ../../lib/log
|
||||
load ../../lib/utilities
|
||||
load ../../lib/search
|
||||
load ../../plugins/available/base.plugin
|
||||
|
||||
cite _about _param _example _group _author _version
|
||||
|
||||
load ../../lib/helpers
|
||||
load ../../plugins/available/base.plugin
|
||||
|
||||
function local_setup {
|
||||
setup_test_fixture
|
||||
|
|
|
|||
|
|
@ -3,10 +3,11 @@
|
|||
load ../test_helper
|
||||
load "${BASH_IT}/vendor/github.com/erichs/composure/composure.sh"
|
||||
load ../../lib/appearance
|
||||
load ../../plugins/available/base.plugin
|
||||
|
||||
cite _about _param _example _group _author _version
|
||||
load ../../lib/log
|
||||
load ../../lib/helpers
|
||||
load ../../plugins/available/base.plugin
|
||||
|
||||
@test "lib log: basic debug logging with BASH_IT_LOG_LEVEL_ALL" {
|
||||
BASH_IT_LOG_LEVEL=$BASH_IT_LOG_LEVEL_ALL
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
load ../test_helper
|
||||
load "${BASH_IT}/vendor/github.com/erichs/composure/composure.sh"
|
||||
load ../../lib/log
|
||||
load ../../lib/helpers
|
||||
load ../../plugins/available/base.plugin
|
||||
|
||||
@test 'plugins base: ips()' {
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
load ../test_helper
|
||||
load "${BASH_IT}/vendor/github.com/erichs/composure/composure.sh"
|
||||
load "${BASH_IT}/lib/log.bash"
|
||||
load "${BASH_IT}/lib/helpers.bash"
|
||||
|
||||
cite _about _param _example _group _author _version
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue