
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 $0
el nombre del script que ejecuta este código, no el archivo ubicado usando el find
comando.
Cualquier sugerencia para resolver este problema, probablemente fácil, es de gran ayuda.
Gracias de antemano.
Actualizar: $0
es el nombre del script ubicado usando el find
comando, 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 $0
y ${PARSEDATA}
expandirme correctamente, ya sea que $0
se expanda bien usando comillas simples o que use comillas dobles ${PARSEDATA}
se expanda bien, pero luego $0
se convierte en el nombre del script original que ejecuta este find
comando.
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 $0
pero{}
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.