Supondo que o rjp2tif
o comando retorna um arquivo-caminho na saída padrão, e você quer passar esta saída como uma regular CLI argumento para outro comando, você pode estar interessado em xargs
de comando. Mas note que, no caso geral, você pode acertar algum problema se o caminho do ficheiro contiver espaços ou então:
Leia espaço, tabulação, nova linha e o fim-de-arquivo delimitado argumentos a partir da entrada padrão e executar o especificado utilitário com eles como argumentos.
Os argumentos são, normalmente, de uma longa lista de nomes de arquivo (gerado pelo ls
ou find
, por exemplo) que se passou a xargs
através de uma tubulação.
Portanto, neste caso, assumindo que cada arquivo-caminho leva apenas uma linha (o que obviamente é o caso, se há apenas uma linha geral), você pode usar o seguinte NUL
baseada em sugestão depender de tr
de comando.
Aqui é o comando que você gostaria de obter:
rjp2tif /path/to/rjpeg | tr '\n' '\0' | xargs -0 open -a imagej
Nota: eu tenho um GNU/Linux OS, de modo que você pode por favor confirmar que ele funciona em macOS?
FTR, abaixo é um abrangente código do shell, permitindo que um teste de dois modos diferentes de xargs
: geração de um comando por linha de argumento (-n1
), ou um único comando com toda a linha de argumentos de uma só vez:
$ 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
comando você tem acima funciona em macOS, obrigado. Eu achei que o-t
opção (rastreamento) paraxargs
é útil para mostrar o quexargs
não para o comando. No caso aqui, quandopath/to/tiff
é passado paraxargs
através do tubo,xargs
reorganiza o comando paraopen -a imagej path/to/tiff
. Muito útil.