Suponiendo que el rjp2tif
comando devuelve un archivo de la ruta en la salida estándar, y desea pasar esta salida como un regular CLI argumento a otro comando, usted puede estar interesado en el xargs
comando. Pero tenga en cuenta que en el caso general, usted puede golpear a algún problema de si el archivo de la ruta contiene espacios o así:
Leer el espacio, tabulador, nueva línea y de fin de archivo delimitado por los argumentos de la entrada estándar y ejecutar el especificado utilidad con ellos como argumentos.
Los argumentos son típicamente una larga lista de nombres de archivos (generado por ls
o find
, por ejemplo) que han pasado a xargs
a través de un tubo.
Así que en este caso, suponiendo que cada archivo de la ruta toma sólo una línea (que es obviamente el caso si sólo hay una línea general), puede utilizar el siguiente NUL
basado en la punta de confiar en el tr
comando.
Este es el comando que iba a obtener:
rjp2tif /path/to/rjpeg | tr '\n' '\0' | xargs -0 open -a imagej
Nota: tengo un GNU/Linux, así que por favor puede confirmar que funciona bajo macOS?
FTR, a continuación es un completo código de shell que permite a uno para poner a prueba dos modos diferentes de xargs
: la generación de un comando por línea-argumento (-n1
), o un comando único con toda la línea de los argumentos en uno:
$ printf 'one \ntwo\nthree and four' | tr '\n' '\0' | xargs -0 -n1 \
bash -c 'printf "Run "; for a; do printf "\"$a\" "; done; echo' bash
Run "one "
Run "two"
Run "three and four"
$ printf 'one \ntwo\nthree and four' | tr '\n' '\0' | xargs -0 \
bash -c 'printf "Run "; for a; do printf "\"$a\" "; done; echo' bash
Run "one " "two" "three and four"
######################################
# or alternatively (with no for loop):
######################################
$ printf 'one \ntwo\nthree and four' | tr '\n' '\0' | xargs -0 -n1 \
bash -c 'printf "Run "; printf "\"%s\" " "$@"; echo' bash
Run "one "
Run "two"
Run "three and four"
$ printf 'one \ntwo\nthree and four' | tr '\n' '\0' | xargs -0 \
bash -c 'printf "Run "; printf "\"%s\" " "$@"; echo' bash
Run "one " "two" "three and four"
tr
la orden tiene por encima funciona en macOS, gracias. He encontrado que la-t
opción (trace) paraxargs
es útil para mostrar lo quexargs
¿para el comando. En el caso aquí, cuandopath/to/tiff
se pasa axargs
a través de la tubería,xargs
reorganiza el comandoopen -a imagej path/to/tiff
. Muy útil.