Предполагая, что rjp2tif
команда возвращает путь к файлу в стандартном выводе, и вы хотите передать этот вывод в качестве обычного аргумента CLI другой команде, вас может заинтересоватьxargs
команда. Но обратите внимание, что в общем случае вы можете столкнуться с некоторой проблемой, если путь к файлу содержит пробелы или около того:
Считайте аргументы, разделенные пробелом, вкладкой, новой строкой и концом файла, из стандартных входных данных и выполните указанную утилиту с ними в качестве аргументов.
Аргументы обычно представляют собой длинный список имен файлов (сгенерированный ls
или find
, например), которые передаются в xargs
по трубе.
Поэтому в этом случае, предполагая, что каждый путь к файлу занимает только одну строку (что, очевидно, имеет место, если в целом есть только одна строка), вы можете использовать следующее NUL
-основанный совет, основанный наtr
команда.
Вот команда, которую вы получите:
rjp2tif /path/to/rjpeg | tr '\n' '\0' | xargs -0 open -a imagej
Примечание: У меня есть ОС GNU/Linux, поэтому не могли бы вы подтвердить, что она работает под macOS?
FTR, ниже приведен полный код оболочки, позволяющий протестировать два различных режима xargs
: создание одной команды на аргумент строки (-n1
), или одна команда со всеми аргументами строки за один раз:
$ 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
команда, которую вы указали выше, работает на macOS, спасибо. Я обнаружил, что-t
опция (трассировка) дляxargs
полезно показать, чтоxargs
выполняет команду. В данном случае, когдаpath/to/tiff
передается вxargs
по трубе,xargs
изменяет порядок выполнения команды наopen -a imagej path/to/tiff
. Очень полезно.