Rúry filepath na ImageJ

0

Otázka

Mám malú pomôcku príkazového riadka rjp2tif že extrakty rádiometrické z jpeg súbor do súboru tiff. Dúfal som, že bude môcť potrubia filepath na ImageJ na príkazový riadok a majú ImageJ open tiff súboru. Na tento účel, rjp2tif píše filepath z tiff súboru na štandardný výstup. Snažil som sa takto v bash:

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

a

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

Prvý otvorí ImageJ, ale nie je otvoriť súbor. Druhá otvorí ImageJ s textového okna s filepath v ňom.

To je na macOS Monterey, ale nemyslím si, že veciach. Niekto sa snažil urobiť to a bola úspešná? TIA.

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

Najlepšiu odpoveď

1

Za predpokladu, že rjp2tif príkaz vráti súbor-cesta na štandardný výstup, a vy chcete prejsť tento výstup ako pravidelné CLI argument pre iný príkaz, ktorý môže mať záujem v xargs príkaz. Ale všimnite si, že vo všeobecnom prípade môže zasiahnuť nejaký problém, ak súbor-cesta obsahuje medzery, alebo tak:

Prečítajte si priestor, kartu newline a koniec-súbor s oddeľovačmi argumenty zo štandardného vstupu a vykonanie zadaného pomôcka s ich ako argumenty.
Argumenty sú zvyčajne dlhý zoznam mien súborov (generovaná ls alebo findnapríklad), ktoré si prešiel na xargs cez potrubie.

Takže v tomto prípade, za predpokladu, že každý súbor-cesta trvá len jeden riadok (čo je zrejme prípade, ak tam je len jeden riadok celkovo), môžete použiť nasledujúce NUL-na základe tip spolieha na tr príkaz.

Je tu príkaz, ktorý by ste získať:

rjp2tif /path/to/rjpeg | tr '\n' '\0' | xargs -0 open -a imagej

Poznámka: mám GNU/Linux, OS, takže môžete mi prosím potvrdiť, je to práca pod macOS?

EZP, nižšie je komplexný shell kód umožňuje jeden test dva rôzne režimy xargs: generovanie jedného príkazu na líniu-argument (-n1), alebo jeden príkaz so všetkými line-argumenty v jednom kole:

$ 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 Áno, tr príkaz máte vyššie sa práce na macOS, vďaka. Zistil som, že -t možnosť (stopy) na xargs je užitočné, ak chcete ukázať, čo xargs sa na povel. V tomto prípade, keď path/to/tiff prešiel do xargs cez potrubie, xargs rearranges príkaz open -a imagej path/to/tiff. Veľmi užitočné.
Jim Merkel

@ErickMD Jedna ďalšia vec, ktorú je uvedené vyššie, že tam je jeden riadok na štandardný výstup z rjp2tif že je odvedený do xargs. Ale mohli by tam byť veľa čiar na štandardný výstup, ak môžem použiť -v možnosť rjp2tif. Môže to fungovať aj v prípade, ak používam tee /dev/tty ak chcete zobraziť všetky riadky na obrazovke nasleduje tail -n 1 len si posledný riadok pre potrubia do xargs. V tomto prípade príkazového riadka: rjp2tif -v /path/to/rjpeg | tee /dev/tty | tail -n 1 | xargs open -a imagej. Nechal som sa tr príkaz pre zjednodušenie.
Jim Merkel

Áno, ale xargs môže tiež podporiť viacero riadkov v vstup ako som už spomenul v odpovedi, a máte 2 možnosti, v tomto prípade: buď spustiť jeden open príkaz pre každý súbor → xargs -0 -n1 open -a imagej; alebo spustiť jeden open príkaz všetky súbory prešiel ako args → xargs -0 open -a imagej. Takže nemusíte tail -n 1 vôbec (ak máte záujem iba jeden súbor, samozrejme)
ErikMD

Vlastne myslím, že som zle odhadol svoje poznámka: s -v možnosť, nebudete mať niekoľko súborov-cesty zapojené, ale len niektoré ďalšie "hluk", ktoré môžu byť odstránené z stdout pomocou tail -n 1skutočne.
ErikMD

Áno, rjp2tif proste funguje jeden súbor v súčasnosti. Na -v je pre veľa. Takže "hluk" je vytlačiť metaúdajov pre súbor. Myslím, že by som mohol vyskúšať a aby rjp2tif práca pre viac súborov.
Jim Merkel

V iných jazykoch

Táto stránka je v iných jazykoch

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