Za předpokladu, že rjp2tif
příkaz vrátí souboru-cestu na standardní výstup, a chcete předat tento výstup jako pravidelné CLI argument jiného příkazu, můžete být zájem xargs
příkaz. Ale všimněte si, že v obecném případě může zasáhnout nějaký problém, pokud soubor-cesta obsahuje mezery nebo tak:
Přečtěte si mezery, tabulátoru, nového řádku a end-of-file delimited argumenty ze standardního vstupu a spustit zadaný utility s nimi jako argumenty.
Argumenty jsou typicky dlouhý seznam názvů souborů (generovaných ls
nebo find
pro příklad), že si prošel k xargs
prostřednictvím potrubí.
Takže v tomto případě, za předpokladu, že každý soubor-cesta trvá jen jeden řádek (což je samozřejmě v případě, pokud je tam jen jeden řádek celkově), můžete použít následující NUL
na bázi tip spoléhat na tr
příkaz.
Zde je příkaz byste získat:
rjp2tif /path/to/rjpeg | tr '\n' '\0' | xargs -0 open -a imagej
Poznámka: mám GNU/Linux OS, takže můžete prosím potvrdit, že to funguje pod macOS?
FTR, níže je komplexní shell kódu, což umožňuje, aby vyzkoušel dva různé režimy xargs
: vytváří jeden příkaz na řádek-argument (-n1
), nebo jeden příkaz s line-argumenty na jeden zátah:
$ 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
příkaz výše funguje na macOS, díky. Zjistil jsem, že-t
možnost (stopy)xargs
je užitečné ukázat, coxargs
dělá příkaz. V případě, kdyžpath/to/tiff
je předánxargs
prostřednictvím potrubí,xargs
uspořádá příkazopen -a imagej path/to/tiff
. Velmi užitečné.