Comillas simples y variables dentro de un shell Bourne

Comillas simples y variables dentro de un shell Bourne

Tengo este comando que estoy intentando ejecutar en el shell bourne de Solaris 9.

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

Mi problema es que la variable ${PARSEDATA}no funciona correctamente. Intenté usar comillas dobles alrededor de ella, entonces el problema es $0el nombre del script que ejecuta este código, no el archivo ubicado usando el findcomando.

Cualquier sugerencia para resolver este problema, probablemente fácil, es de gran ayuda.

Gracias de antemano.

Actualizar: $0es el nombre del script ubicado usando el findcomando, la variable para ${PARSEDATA}es un filtro, ubicado en algún lugar del sistema que modifica la salida de cada script ubicado. Sin embargo, el problema es que parece que no puedo obtener ambos $0y ${PARSEDATA}expandirme correctamente, ya sea que $0se expanda bien usando comillas simples o que use comillas dobles ${PARSEDATA}se expanda bien, pero luego $0se convierte en el nombre del script original que ejecuta este findcomando.

Respuesta1

¿No estoy seguro de lo que estás intentando hacer? Pero si desea buscar scripts llamados check_* y luego ejecutarlo y canalizarlo a través de un programa ${PARSE_DATA}, bueno, supongo que el archivo ubicado por find no es $0pero{}

Ejemplo

buscar /var/ftp/mp3 -nombre "*.mp3" -tipo f -exec chmod 644 {} \; (Wikipedia)

Entonces creo que puedes usar tus comillas dobles:

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

Lo intenté con éxito:

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

> Bleh Blah

Respuesta2

Mantenga las comillas simples, el problema es muy probable que no haya exportado la variable PARSEDATA.

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

Respuesta3

Si desea que el shell no expanda $0 (usando comillas simples) y que se expanda ${PARSEDATA}, entonces ¿por qué no usar comillas diferentes para cada una?

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

Siempre que mantenga unidas las partes citadas, el shell simplemente expandirá ${PARSEDATA} y pasará el comando completo como un único token para buscar.

información relacionada