-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* 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. ♥
- Loading branch information
1 parent
127cbbd
commit c2c76a3
Showing
6 changed files
with
155 additions
and
185 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,216 +1,180 @@ | ||
# shellcheck shell=bash | ||
cite about-plugin | ||
about-plugin 'miscellaneous tools' | ||
|
||
function ips () | ||
{ | ||
about 'display all ip addresses for this host' | ||
group 'base' | ||
if _command_exists ifconfig | ||
then | ||
ifconfig | awk '/inet /{ gsub(/addr:/, ""); print $2 }' | ||
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 ips() { | ||
about 'display all ip addresses for this host' | ||
group 'base' | ||
if _command_exists ifconfig; then | ||
ifconfig | awk '/inet /{ gsub(/addr:/, ""); print $2 }' | ||
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 () | ||
{ | ||
about 'checks whether a website is down for you, or everybody' | ||
param '1: website url' | ||
example '$ down4me http://www.google.com' | ||
group 'base' | ||
curl -Ls "http://downforeveryoneorjustme.com/$1" | sed '/just you/!d;s/<[^>]*>//g' | ||
function down4me() { | ||
about 'checks whether a website is down for you, or everybody' | ||
param '1: website url' | ||
example '$ down4me http://www.google.com' | ||
group 'base' | ||
curl -Ls "http://downforeveryoneorjustme.com/$1" | sed '/just you/!d;s/<[^>]*>//g' | ||
} | ||
|
||
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; | ||
fi | ||
done | ||
res=$(echo "$res" | grep -Eo '[0-9\.]+') | ||
echo -e "Your public IP is: ${echo_bold_green} $res ${echo_normal}" | ||
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 | ||
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-}" | ||
} | ||
|
||
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 | ||
function pickfrom() { | ||
about 'picks random line from file' | ||
param '1: filename' | ||
example '$ pickfrom /usr/share/dict/words' | ||
group 'base' | ||
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 () | ||
{ | ||
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 ' ')" | ||
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 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 | ||
alias pass=passgen | ||
if ! _command_exists pass || [[ "${BASH_IT_LEGACY_PASS:-}" = true ]]; then | ||
alias pass=passgen | ||
fi | ||
|
||
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 | ||
} | ||
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' | ||
|
||
function mkcd () | ||
{ | ||
about 'make one or more directories and cd into the last one' | ||
param 'one or more directories to create' | ||
example '$ mkcd foo' | ||
example '$ mkcd /tmp/img/photos/large' | ||
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 -- "\"\$$#\"" | ||
} | ||
markdown "${1?}" | browser | ||
} | ||
fi | ||
|
||
function lsgrep () | ||
{ | ||
about 'search through directory contents with grep' | ||
group 'base' | ||
ls | grep "$*" | ||
function mkcd() { | ||
about 'make one or more directories and cd into the last one' | ||
param 'one or more directories to create' | ||
example '$ mkcd foo' | ||
example '$ mkcd /tmp/img/photos/large' | ||
example '$ mkcd foo foo1 foo2 fooN' | ||
example '$ mkcd /tmp/img/photos/large /tmp/img/photos/self /tmp/img/photos/Beijing' | ||
group 'base' | ||
mkdir -p -- "$@" && cd -- "${!#}" || return | ||
} | ||
|
||
function quiet () | ||
{ | ||
about 'what *does* this do?' | ||
group 'base' | ||
$* &> /dev/null & | ||
# shellcheck disable=SC2010 | ||
function lsgrep() { | ||
about 'search through directory contents with grep' | ||
group 'base' | ||
ls | grep "$@" | ||
} | ||
|
||
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 quiet() { | ||
about 'what *does* this do?' | ||
group 'base' | ||
nohup "$@" &> /dev/null < /dev/null & | ||
} | ||
|
||
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 | ||
function usage() { | ||
about 'disk usage per directory, in Mac OS X and Linux' | ||
param '1: directory name' | ||
group 'base' | ||
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 | ||
# if user has installed todo plugin, skip this... | ||
function t () | ||
{ | ||
about 'one thing todo' | ||
param 'if not set, display todo item' | ||
param '1: todo text' | ||
if [[ "$*" == "" ]] ; then | ||
cat ~/.t | ||
else | ||
echo "$*" > ~/.t | ||
fi | ||
} | ||
# 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() { | ||
about 'one thing todo' | ||
param 'if not set, display todo item' | ||
param '1: todo text' | ||
if [[ "$*" == "" ]]; then | ||
cat ~/.t | ||
else | ||
echo "$*" > ~/.t | ||
fi | ||
} | ||
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 () | ||
{ | ||
about 'creates iso from current dir in the parent dir (unless defined)' | ||
param '1: ISO name' | ||
param '2: dest/path' | ||
param '3: src/path' | ||
example '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 | ||
|
||
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}" | ||
else | ||
echo "${destpath}${isoname}.iso already exists" | ||
fi | ||
else | ||
echo "mkisofs cmd does not exist, please install cdrtools" | ||
fi | ||
} | ||
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' | ||
param '3: src/path' | ||
example 'mkiso' | ||
example 'mkiso ISO-Name dest/path src/path' | ||
group 'base' | ||
|
||
local isoname="${1:-${PWD##*/}}" | ||
local destpath="${2:-../}" | ||
local srcpath="${3:-${PWD}}" | ||
|
||
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}" | ||
else | ||
echo "${destpath%/}/${isoname}.iso already exists" | ||
fi | ||
} | ||
fi | ||
|
||
# useful for administrators and configs | ||
function buf () | ||
{ | ||
about 'back up file with timestamp' | ||
param 'filename' | ||
group 'base' | ||
local filename=$1 | ||
local filetime=$(date +%Y%m%d_%H%M%S) | ||
cp -a "${filename}" "${filename}_${filetime}" | ||
function buf() { | ||
about 'back up file with timestamp' | ||
param 'filename' | ||
group 'base' | ||
local filename="${1?}" filetime | ||
filetime=$(date +%Y%m%d_%H%M%S) | ||
cp -a "${filename}" "${filename}_${filetime}" | ||
} | ||
|
||
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; | ||
} | ||
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 | ||
} | ||
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.