Conducta filepath să ImageJ

0

Problema

Am un mic utilitar de linie de comandă rjp2tif asta extracte radiometrice date dintr-un fișier jpeg într-un fișier tiff. Am fost în speranța de a fi capabil de a conductei de filepath să ImageJ pe linie de comandă și au ImageJ deschide fișierul tiff. În acest scop, rjp2tif scrie filepath de fișier tiff la ieșirea standard. Am încercat următoarele în bash:

$ rjp2tif /path/to/rjpeg | open -a imagej

și

$ rjp2tif /path/to/rjpeg | open -a imagej -f

Primul care deschide ImageJ, dar nu se deschide fișierul. Cea de-a doua se deschide ImageJ, cu o fereastră de text cu filepath în ea.

Acest lucru este pe macOS Monterey, dar eu nu cred că asta contează. Cineva a încercat să facă acest lucru și a fost de succes? TIA.

bash macos
2021-11-23 23:05:07
1

Cel mai bun răspuns

1

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 NULpe 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" 
2021-11-24 14:55:40

@ErickMD Da, 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 ce xargs face la comanda. În cazul de față, atunci când path/to/tiff este trecut la xargs prin intermediul conductei, xargs rearanjează comandă pentru a open -a imagej path/to/tiff. Foarte util.
Jim Merkel

@ErickMD încă Un lucru, ați menționat mai sus că există o singură linie de ieșire standard de rjp2tif care este adus la xargs. Cu toate acestea nu ar putea fi mai multe linii de ieșire standard dacă am folosi un -v opțiunea de a rjp2tif. Acest lucru poate lucra, de asemenea, dacă am folosi tee /dev/tty pentru a afișa toate liniile de pe ecran, urmat de tail -n 1 pentru a obține doar ultima linie pentru tubulatura xargs. În acest caz linia de comandă este: rjp2tif -v /path/to/rjpeg | tee /dev/tty | tail -n 1 | xargs open -a imagej. Am lăsat afară tr comanda pentru simplificare.
Jim Merkel

Da, dar xargs puteți sprijini, de asemenea, mai multe linii de intrare după cum am menționat în răspunsul meu, și ai 2 variante in acest caz: fie executați una open comanda pentru fiecare fișier → xargs -0 -n1 open -a imagej; sau de a rula o singură open comanda cu toate fișierele trecut ca args → xargs -0 open -a imagej. Deci, nu aveți nevoie tail -n 1 la toate (dacă nu sunt interesați într-un singur fișier, desigur)
ErikMD

De fapt, cred că am interpretat greșit remarca ta: cu -v opțiune, nu aveți mai multe file-căi implicate, dar doar unele suplimentare de "zgomot" care pot fi eliminate de la stdout prin utilizarea tail -n 1într-adevăr.
ErikMD

Da, rjp2tif doar lucrează cu un fișier în prezent. La -v este pentru verbose. Deci, "zgomot" este un print din metadatele pentru fișiere. Cred că aș putea încerca și de a face rjp2tif de lucru pentru mai multe fișiere.
Jim Merkel

În alte limbi

Această pagină este în alte limbi

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................