Opções de passagem para subcomandos no bash

3

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?

    
por Dan 11.12.2013 / 22:44

2 respostas

3
echo ${FILENAME_ARGS} | grep -e - | sort >options
echo ${FILENAME_ARGS} | grep -v -e - >files
    
por 12.12.2013 / 00:43
2

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}
    
por 12.12.2013 / 04:26