## various functions function makeiso() { local ISO_FILE ISO_VOL_ID SOURCE USAGE USAGE="usage: makeiso ISO_FILE ISO_VOL_ID SOURCE [SOURCE2 SOURCE 3...]" if [ -z "$1" ]; then echo -e "${USAGE}"; return 1 fi ISO_FILE="$1" ISO_VOL_ID="$2" shift 2 SOURCE="$@" mkisofs -J -r -V "${ISO_VOL_ID}" -o "${ISO_FILE}" ${SOURCE} } function burniso() { local ISO_FILE CDRECORD_ARGS USAGE USAGE="usage: burniso ISO_FILE" if [ -z "$1" ]; then echo -e "${USAGE}"; return 1 fi ISO_FILE="$1" CDRECORD_ARGS="-v dev=$CDR_DEVICE speed=$CDR_SPEED driveropts=burnfree -eject" sudo cdrecord ${CDRECORD_ARGS} -data "${ISO_FILE}" } function copycd() { local CD_DEV CDR_DEV CDR_SPEED CDRECORD_ARGS USAGE USAGE="usage: copycd CD_DEV CDR_DEV CDR_SPEED" if [ -z "$1" ]; then echo -e "${USAGE}"; return 1 fi CD_DEV="$1" CDR_DEV_ID="$2" CDR_SPEED="$3" CDRECORD_ARGS="-v dev=$CDR_DEV_ID speed=$CDR_SPEED driveropts=burnfree -eject" cdrecord ${CDRECORD_ARGS} -isosize ${CD_DEV} } function ripcd() { while true; do echo "*** ripper:" echo "--- 1: cdda2wav" echo "--- 2: cdparanoia" echo "--- q: none, quit." echo -n "--- use: " read -en 1 use case "${use}" in 1) exec sudo cdda2wav -O wav -H -B -P 0 ;; 2) exec sudo cdparanoia -b -d /dev/cdrom ;; q) echo "*** have a nice day. EOF" break ;; *) echo "!!! wrong answer." ;; esac done } function mrproper() { local DIR PATTERN USAGE USAGE="mrproper [DIR]" PATTERN="^.*/(.*(~|\.(bak|tmp|orig|rej|swp))|core|a\.out)$" if [ -z "$1" ]; then DIR="." else DIR="$1" fi echo -n "really clean directory \"$DIR\" RECURSIVELY?: " read yn if [ "$yn" = "y" ]; then find "$DIR" -type f | egrep "$PATTERN" | xargs -i rm -vf "{}" else echo -n "not " fi echo "cleaned." } function colors() { local T FGs FG BG T="gYw" # the test text echo -e "\n 40m 41m 42m 43m 44m 45m 46m 47m" for FGs in \ ' m' ' 1m' ' 30m' '1;30m' ' 31m' '1;31m' ' 32m' \ '1;32m' ' 33m' '1;33m' ' 34m' '1;34m' ' 35m' '1;35m' \ ' 36m' '1;36m' ' 37m' '1;37m'; do FG=${FGs// /} echo -en " $FGs \033[$FG $T " for BG in 40m 41m 42m 43m 44m 45m 46m 47m; do echo -en " \033[$FG\033[$BG $T \033[0m" done echo done echo } function f() { local USAGE USAGE="usage: f [PATH] [INAME]\n\nINAME is a case insensitive name-pattern" find ${1:+ "$1"} ${2:+ \-iname "$2"} -print } function mkcd() { local USAGE USAGE="usage: mkcd DIRECTORY" if [ -z "$1" ]; then echo -e "$USAGE"; return 1 fi mkdir -p "$1"; cd "$1" } function pfcp() { local USAGE USAGE="usage: pfcp SRC DST" if [ "$#" -lt 2 ]; then echo -e "$USAGE"; return 1 fi src="$1" if [ ! -f "${src}" ]; then echo "ERROR: can only copy regular files"; return 1 fi src_base="${src##*/}" dst="$2" if [ -d "${dst}" ]; then dst="${dst%*/}/${src_base}" fi pv -W -p -t -e -r -b -s $(du -sb "${src}" | awk '{ print $1 }') < "${src}" >"${dst}" # pipemeter -f "${src}" >"${dst}" } function prompt_elite { local C_GRAY="\[\033[1;30m\]" local C_LIGHT_GRAY="\[\033[0;37m\]" local C_CYAN="\[\033[0;36m\]" local C_LIGHT_CYAN="\[\033[1;36m\]" local C_NONE="\[\033[0m\]" case $TERM in xterm*|rxvt*) local TITLEBAR='\[\033]0;\u@\h:\w\007\]' ;; *) local TITLEBAR="" ;; esac local temp=$(tty) local GRAD1=${temp:5} PS1="$TITLEBAR$C_GRAY-$C_CYAN-$C_LIGHT_CYAN($C_CYAN\u$C_GRAY@$C_CYAN\h$C_LIGHT_CYAN)$C_CYAN-$C_LIGHT_CYAN($C_CYAN\#$C_GRAY/$C_CYAN$GRAD1$C_LIGHT_CYAN)$C_CYAN-$C_LIGHT_CYAN($C_CYAN\$(date +%H%M)$C_GRAY/$C_CYAN\$(date +%d-%b-%y)$C_LIGHT_CYAN)$C_CYAN-$GRAY-$C_LIGHT_GRAY\n$C_GRAY-$C_CYAN-$C_LIGHT_CYAN($C_CYAN\$$C_GRAY:$C_CYAN\w$C_LIGHT_CYAN)$C_CYAN-$C_GRAY-$C_LIGHT_GRAY " PS2="$LIGHT_CYAN-$CYAN-$GRAY-$C_NONE " } function remount() { /bin/mount -o remount ${1+"$@"}; } function repeat() { local USAGE COUNT I USAGE="usage: repeat COUNT COMMAND" if [ -z "$1" ] || [ -z "$2" ]; then echo -e "$USAGE"; return 1 fi COUNT="$1" shift for I in $(seq 1 "$COUNT"); do eval "$@" done } function rot13() { if [ $# = 0 ] ; then tr "[a-m][n-z][A-M][N-Z]" "[n-z][a-m][N-Z][A-M]" else tr "[a-m][n-z][A-M][N-Z]" "[n-z][a-m][N-Z][A-M]" < $1 fi } ## sizeof function for bash-arrays function sizeof() { eval echo \${#$1[@]} } ## returns short pwd (last two directories) function spwd() { IFS="/" set $PWD if test $# -le 3 ; then echo "$PWD" else eval echo \"..\${$(($# - 1))}/\${$#}\" fi } ## returns base pwd (last directory) function bpwd() { echo "${PWD##*/}" } ## shell seq replacement function sseq() { local FIRST LAST INCREMENT CMP OP USAGE USAGE="usage: sseq LAST\n or: sseq FIRST LAST\n or: sseq FIRST INCREMENT LAST" case "$#" in 1) LAST=$1 FIRST=1 INCREMENT=1;; 2) LAST=$2 FIRST=$1 INCREMENT=1;; 3) LAST=$3 FIRST=$1 INCREMENT=$2;; *) echo -e "$USAGE"; return 1;; esac if [ $FIRST -eq $LAST ]; then return elif [ $FIRST -lt $LAST ]; then CMP="le" OP="+" elif [ $FIRST -gt $LAST ]; then CMP="ge" OP="-" fi while [ $FIRST -$CMP $LAST ]; do echo "$FIRST" FIRST=$(($FIRST $OP $INCREMENT)) done } ## ssh-copy-id clone test -x "$(type -p ssh-copy-id)" || { function ssh-copy-id() { local USAGE DST_HOST DST_AUTHKEYS SRC_PUBKEY USAGE="usage: ssh-copy-id [USER@]HOST" if [ -z "$1" ]; then echo -e "$USAGE"; return 1 fi DST_HOST="$1" shift SSH_PARAMS="$@" DST_SSHDIR="~/.ssh" DST_SSHAUTHKEYS="${DST_SSHDIR}/authorized_keys2" SRC_SSHPUBKEY="$HOME/.ssh/id_dsa.pub" ssh $DST_HOST $SSH_PARAMS "test -d ${DST_SSHDIR} || mkdir -p ${DST_SSHDIR}; cat >>$DST_SSHAUTHKEYS" <"$SRC_SSHPUBKEY" && { echo "public key $SRC_SSHPUBKEY copied successfully to $DST_HOST:$DST_SSHAUTHKEYS." } } } function swatch() { local USAGE FILE USAGE="usage: swatch INTERVAL COMMAND" if [ -z "${1}" ] || [ -z "${2}" ]; then echo -e "${USAGE}"; return 1 fi while true; do clear echo -e "Every ${1}s: ${2}\t[$(date)]" eval ${2} sleep ${1} done } function now() { local USAGE DELIMITER FMT USAGE="usage: now ELEMENT [DELIMITER]\n\nELEMENT can be date [d] or time [t]" DELIMITER=""; test -n "$2" && DELIMITER="$2" case "$1" in date|d) FMT="%Y$DELIMITER%m$DELIMITER%d";; time|t) FMT="%H$DELIMITER%M$DELIMITER%S";; *) echo -e "$USAGE"; return 1 esac date +$FMT } function untar() { local USAGE FILE USAGE="usage: untar FILE [FILE 2] ... [FILE n]" if [ -z "$1" ]; then echo -e "$USAGE"; return 1 fi for FILE in $*; do tar xvf $FILE done } function untbz2() { local USAGE FILE USAGE="usage: untbz2 FILE [FILE 2] ... [FILE n]" if [ -z "$1" ]; then echo -e "$USAGE"; return 1 fi for FILE in $*; do tar xjvf $FILE done } function untgz() { local USAGE FILE USAGE="usage: untgz FILE [FILE 2] ... [FILE n]" if [ -z "$1" ]; then echo -e "$USAGE"; return 1 fi for FILE in $*; do tar xzvf $FILE done }