Farto de invocações de comandos repetitivas como em
$> ./rebar get-deps && ./rebar clean && ./rebar compile
Proponho um script de shell simples para reescrever esse tipo de coisa como
$> seq ./rebar get-deps clean compile
Formato
seq [-s | --silent] [-se | --silent-error] [-E | --stop-on-error] command op1 op2 ...
Opções
- -s | –silent
A saída do comando é despejada
- -se | –silent-error
Não avise sobre operações com falha
- -E | –stop-on-error
Pare na primeira operação com falha
Exemplos
$> ../bin/seq.sh -s -se -E ./rebar get-deps foo clean bar compile
$> ../bin/seq.sh -s -E ./rebar get-deps foo clean bar compile
operation foo failed
O roteiro
#!/bin/bash
function usage() {
echo `basename $0` "[-s | --silent] [-se | --silent-error] [-E | --stop-on-error] command op1 op2 ..."
}
silentCommand=false
stopOnError=false
silentError=false
continue=true
options=""
while [ "$continue" == true ]; do
case $1 in
-s | --silent)
shift
silentCommand=true
options="$options --silent"
;;
-se | --silent-error)
shift
silentError=true
options="$options --silent-error"
;;
-E | --stop-on-error)
shift
stopOnError=true
options="$options --stop-on-error"
;;
*)
continue=false
esac
done
if [ $# -lt 2 ]
then
usage
exit
fi
self=$0
cmd=$1
op=$2
redirect="2>&1"
if [ $silentCommand == true ]
then
redirect="$redirect > /dev/null"
fi
eval "$cmd $op $redirect"
if [ ! $? -eq 0 ]
then
if [ $silentError == false ]
then
echo "operation $op failed"
fi
if [ $stopOnError == true ]
then
exit
fi
fi
shift; shift;
if [ $# -ge 1 ]
then
$self $options $cmd $*
fi