¿Quieres mejorar esta pregunta? Actualice la pregunta para que pueda responderse con hechos y citas editando esta publicación.
Cerrado hace 7 años.
Mejorar esta pregunta
Suponga que tiene el siguiente problema:
Dependiendo de si un script se ejecuta dentro de una canalización o no, desea agregar el -print0
parámetro a find
.
Se me ocurren al menos dos formas de hacerlo:
[[ -p '/dev/stdin' ]] && local null_terminated='-print0'
find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" ) "$null_terminated"
O
if [[ -p '/dev/stdin' ]]; then
find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" ) -print0
else
find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" )
fi
¿Hay alguna manera mejor de hacer esto? La pregunta es para bash
, pero soluciones para otros shells o portátiles/estándar sh
las soluciones también serían bienvenidas.
Respuesta aceptada:
El primero no funcionará como si $null_terminated
está vacío o no configurado, find
se quejará de ese argumento extra vacío.
find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" ) $null_terminated
Funcionaría pero solo si $null_terminated
no contiene caracteres comodín ni caracteres de IFS.
Haciéndolo:
if [[ -p '/dev/stdin' ]]; then
extra_args=(-print0)
else
extra_args=()
fi
find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" ) "${extra_args[@]}"
no tendría el problema.
Bourne/POSIXly, podrías hacer:
establecer -- buscar . ! -nombre . -ciruela pasa ! ( "[correo electrónico protegido]" )[ -p /dev/stdin ] &&set -- "[correo electrónico protegido]" -exec printf '%s