
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 é $0
o nome do script que executa esse código, não o arquivo localizado usando o find
comando.
Qualquer sugestão para resolver este problema, provavelmente fácil, é muito útil.
Desde já, obrigado.
Atualizar: $0
é o nome do script localizado usando o find
comando, 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 $0
e ${PARSEDATA}
expandir corretamente, ou $0
expande bem usando aspas simples ou usando aspas duplas, ${PARSEDATA}
expande bem, mas então $0
se torna o nome do script original que executa este find
comando.
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 é, $0
mas{}
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.