Aspas simples e variáveis dentro de uma concha de bourne

1

Eu tenho este comando que estou tentando executar no shell bourne para o Solaris 9.

find ${DATADIR} -name "check_*" -type f -exec sh -c '$0 | ${PARSEDATA}' {} \; >> ${TMP_1}

Meu problema é que a variável ${PARSEDATA} não funcionará corretamente, tentei usar aspas duplas em torno dela, então o problema é $0 é o nome do script que está executando este código, não o arquivo localizado usando o find command.

Qualquer sugestão para resolver isso, provavelmente um problema fácil, é muito útil.

Obrigado antecipadamente.

Atualização: $0 é o nome do script localizado usando o comando find , a variável para ${PARSEDATA} é um filtro, localizado em algum lugar no sistema que modifica a saída de cada script localizado. No entanto, o problema é que parece que não consigo expandir $0 e ${PARSEDATA} adequadamente, ou $0 expande bem usando aspas simples ou usando qoutes duplos ${PARSEDATA} expande bem, mas $0 torna-se o nome do script original que executa este find -command.

    
por user32178 12.04.2011 / 11:16

3 respostas

0

Não tenho certeza do que você está tentando fazer? Mas se você quiser procurar por scripts chamados check_ * e então executá-los e enviá-los através de um programa $ {PARSE_DATA}, bem, eu acho que o arquivo localizado por find não é $0 mas {}

Exemplo

find /var/ftp/mp3 -name "*.mp3" -type f -exec chmod 644 {} \; (Wikipedia)

Então, eu acho que você pode usar suas aspas duplas:

find ${DATADIR} -name "check_*" -type f -exec sh -c '{} | ${PARSEDATA}' \; >> ${TMP_1}

Eu tentei com sucesso:

PG='sed s/Blah/Bleh/'
find . -name "check_*" -type f -exec sh -c "{} | $PG" \;

> Bleh Blah
    
por 12.04.2011 / 11:31
0

Mantenha as aspas simples, o problema é que você provavelmente não exportou a variável PARSEDATA.

export PARSEDATA
find ${DATADIR} -name "check_*" -type f -exec sh -c '$0 | ${PARSEDATA}' {} \; >> ${TMP_1}
    
por 12.04.2011 / 14:01
0

Se você quiser que $ 0 não seja expandido pelo shell (usando aspas simples) e $ {PARSEDATA} seja expandido, então por que não usar apenas aspas diferentes para cada um:

find ${DATADIR} -name "check_*" -type f -exec sh -c '$0 | '"${PARSEDATA}" {} \; >> ${TMP_1}

Contanto que você mantenha as partes citadas juntas, o shell apenas expandirá $ {PARSEDATA} e passará o comando inteiro como um único token para encontrar.

    
por 12.06.2011 / 17:24