Presupunând că rjp2tif
comanda returnează un fișier-calea standard de ieșire, și doriți să treci această ieșire ca un simplu CLI argument pentru o altă comandă, ați putea fi interesat în xargs
comanda. Dar, rețineți că, în cazul general, s-ar putea lovi o problemă dacă fișierul-calea conține spații sau așa:
Citește spațiu, tab, newline și de sfârșit de fișier delimitat argumente de la intrarea standard și executa specificate de utilitate cu ei ca argumente.
Argumentele sunt de obicei o lungă listă de nume de fișiere (generate de ls
sau find
, de exemplu), că a trecut la xargs
printr-o țeavă.
Deci, în acest caz, presupunând că fiecare fișier-calea nevoie de doar o singură linie (care este, evident, cazul dacă există o singură linie de ansamblu), puteți utiliza următoarele NUL
pe baza sfat bazându-se pe tr
comanda.
Aici este comanda vei obține:
rjp2tif /path/to/rjpeg | tr '\n' '\0' | xargs -0 open -a imagej
Notă: am un GNU/Linux sistem de OPERARE, astfel încât puteți să vă rugăm să confirmați funcționează sub macOS?
FTR, mai jos este o cuprinzătoare de coajă de cod care să permită o pentru a testa două moduri diferite de xargs
: se generează o comandă pe linie-argument (-n1
), sau o singură comandă cu toate line-argumente într-o singură:
$ 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
comanda de mai sus aveți nu funcționează pe macOS, multumesc. Am constatat că-t
opțiune (trace) săxargs
este util pentru a arăta ceea cexargs
face la comanda. În cazul de față, atunci cândpath/to/tiff
este trecut laxargs
prin intermediul conductei,xargs
rearanjează comandă pentru aopen -a imagej path/to/tiff
. Foarte util.