Aspas simples e variáveis ​​dentro de um bourne shell

Aspas simples e variáveis ​​dentro de um bourne shell

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

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

Meu problema é que a variável ${PARSEDATA}não funciona corretamente, tentei usar aspas duplas, então o problema é $0o nome do script que executa esse código, não o arquivo localizado usando o findcomando.

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

Desde já, obrigado.

Atualizar: $0é o nome do script localizado usando o findcomando, a variável for ${PARSEDATA}é um filtro, localizado em algum lugar do sistema que modifica a saída de cada script localizado. No entanto, o problema é que não consigo obter os dois $0e ${PARSEDATA}expandir corretamente, ou $0expande bem usando aspas simples ou usando aspas duplas, ${PARSEDATA}expande bem, mas então $0se torna o nome do script original que executa este findcomando.

Responder1

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

Exemplo

encontre /var/ftp/mp3 -name "*.mp3" -type f -exec chmod 644 {} \; (Wikipédia)

Então, acho que você pode usar 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

Responder2

Mantenha as aspas simples, é muito provável que você não tenha exportado a variável PARSEDATA.

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

Responder3

Se você deseja que $0 não seja expandido pelo shell (usando aspas simples) e ${PARSEDATA} seja expandido, por que não usar 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 unidas, o shell irá apenas expandir ${PARSEDATA} e passar o comando inteiro como um único token para localizar.

informação relacionada