Add new file
This commit is contained in:
parent
eab8520071
commit
de57b14d74
1 changed files with 112 additions and 0 deletions
112
bar2.sh
Normal file
112
bar2.sh
Normal file
|
@ -0,0 +1,112 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
#############################################################################
|
||||||
|
###########################################################################
|
||||||
|
###
|
||||||
|
### Modified/Rewritten by A.M.Danischewski (c) 2015 v1.1
|
||||||
|
### Issues: If you find any issues emai1 me at my <first name> dot
|
||||||
|
### <my last name> at gmail dot com.
|
||||||
|
###
|
||||||
|
### Based on scripts posted by Pez Cuckow, William Pursell at:
|
||||||
|
### http://stackoverflow.com/questions/12498304/using-bash-to-display-\
|
||||||
|
### a-progress-working-indicator
|
||||||
|
###
|
||||||
|
### This program runs a program passed in and outputs a timing of the
|
||||||
|
### command and it exec's a new fd for stdout so you can assign a
|
||||||
|
### variable the output of what was being run.
|
||||||
|
###
|
||||||
|
### This is a very new rough draft but could be expanded.
|
||||||
|
###
|
||||||
|
### This program is free software: you can redistribute it and/or modify
|
||||||
|
### it under the terms of the GNU General Public License as published by
|
||||||
|
### the Free Software Foundation, either version 3 of the License, or
|
||||||
|
### (at your option) any later version.
|
||||||
|
###
|
||||||
|
### This program is distributed in the hope that it will be useful,
|
||||||
|
### but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
### GNU General Public License for more details.
|
||||||
|
###
|
||||||
|
### You should have received a copy of the GNU General Public License
|
||||||
|
### along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
###########################################################################
|
||||||
|
#############################################################################
|
||||||
|
|
||||||
|
declare CMD="${1}"
|
||||||
|
shift ## Clip the first value of the $@, the rest are the options.
|
||||||
|
declare CMD_OPTIONS="$@"
|
||||||
|
declare CMD_OUTPUT=""
|
||||||
|
declare TMP_OUTPUT="/tmp/_${0##*/}_$$_$(date +%Y%m%d%H%M%S%N)"
|
||||||
|
declare -r SPIN_DELAY="0.1"
|
||||||
|
declare -i PID=
|
||||||
|
|
||||||
|
function usage() {
|
||||||
|
cat <<EOF
|
||||||
|
|
||||||
|
Description: ${0##*/}
|
||||||
|
|
||||||
|
This program runs a program passed in and outputs a timing of the
|
||||||
|
command and it exec's a new fd for stdout so you can assign a variable
|
||||||
|
the output of what was being run.
|
||||||
|
|
||||||
|
Usage: ${0##*/} <command> [command options]
|
||||||
|
|
||||||
|
E.g.
|
||||||
|
>$ ${0##*/} sleep 5 \&\& echo "hello" \| figlet
|
||||||
|
Running: sleep 5 && echo hello | figlet, PID 2587:/
|
||||||
|
|
||||||
|
real 0m5.003s
|
||||||
|
user 0m0.000s
|
||||||
|
sys 0m0.002s
|
||||||
|
_ _ _
|
||||||
|
| |__ ___| | | ___
|
||||||
|
| '_ \ / _ \ | |/ _ \
|
||||||
|
| | | | __/ | | (_) |
|
||||||
|
|_| |_|\___|_|_|\___/
|
||||||
|
|
||||||
|
Done..
|
||||||
|
>$ var=\$(${0##*/} sleep 5 \&\& echo hi)
|
||||||
|
Running: sleep 5 && echo hi, PID 32229:-
|
||||||
|
real 0m5.003s
|
||||||
|
user 0m0.000s
|
||||||
|
sys 0m0.001s
|
||||||
|
Done..
|
||||||
|
>$ echo \$var
|
||||||
|
hi
|
||||||
|
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
function spin_wait() {
|
||||||
|
local -a spin
|
||||||
|
spin[0]="-"
|
||||||
|
spin[1]="\\"
|
||||||
|
spin[2]="|"
|
||||||
|
spin[3]="/"
|
||||||
|
echo -en "Running: ${CMD} ${CMD_OPTIONS}, PID ${PID}: " >&3
|
||||||
|
while kill -0 ${PID} 2>/dev/random; do
|
||||||
|
for i in "${spin[@]}"; do
|
||||||
|
echo -ne "\b$i" >&3
|
||||||
|
sleep ${SPIN_DELAY}
|
||||||
|
done
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
function run_cmd() {
|
||||||
|
exec 3>$(tty)
|
||||||
|
eval "time ${CMD} ${CMD_OPTIONS}" 2>>"${TMP_OUTPUT}" | tee "${TMP_OUTPUT}" &
|
||||||
|
PID=$! # Set global PID to process id of the command we just ran.
|
||||||
|
spin_wait
|
||||||
|
echo -en "\n$(< "${TMP_OUTPUT}")\n" >&3
|
||||||
|
echo -en "Done..\n" >&3
|
||||||
|
rm "${TMP_OUTPUT}"
|
||||||
|
exec 3>&-
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ -z "${CMD}" || "${CMD}" =~ ^-. ]]; then
|
||||||
|
usage | more && exit 0
|
||||||
|
else
|
||||||
|
run_cmd
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
Loading…
Reference in a new issue