echo ${FILENAME_ARGS} | grep -e - | sort >options
echo ${FILENAME_ARGS} | grep -v -e - >files
Estou escrevendo uma seqüência de comandos que eu costumava usar manualmente. O esboço é algo como isto
$ echo ${FILENAME_ARGS} | some | big | pipeline | sort -options | etc >temp
$ gs -OptionsThatNeverChange 'cat temp'
Basicamente, a única coisa que muda entre as execuções são as opções passadas para classificar e os arquivos contidos em FILENAME_ARGS.
O que eu quero fazer é poder digitar algo como
$ do-thing -some -options *.pdf
e todas as -whatever
vão para as opções de classificação, enquanto todas as *.pdf
vão para FILENAME_ARGS. Para fazer isso, preciso de uma maneira de escolher todas as coisas que começam com -
de $@
. Existe alguma maneira simples de extrair opções dos argumentos passados para um script de shell?
No seu lugar, eu escreveria um script que pegasse todos os seus argumentos e os designasse como variáveis, depois executasse | muito | longo | pipe com as variáveis de argumento descartadas quando necessário, ou seja,
$ ./wrapper.sh -a firstoption -b secondoption -c thirdoption
$ cat wrapper.sh
#!/bin/bash
#trap variables with case statement here
for arg in "$@" ; do
case "$arg" in
-a)
alpha=$2
shift
;;
-b)
bravo=$2
shift
;;
-c)
charlie=$2
shift
;;
esac
done
# at this point: $alpha=firstoption
# $bravo=secondoption
# $charlie=thirdoption
echo "Better grab a coffee man, this could take a while...."
echo "STUFF" | some $alpha $bravo | big -c $bravo -Z $charlie | pipeline -yx $charlie $alpha $bravo| sort -N $charlie -options | etc.${bravo}.${alpha} >temp.${charlie}
Tags bash options shell-script