En supposant que le rjp2tif
commande renvoie un chemin-fichier standard de sortie, et que vous souhaitez passer cette sortie comme un régulier de la CLI argument d'une autre commande, vous pouvez être intéressé par la xargs
commande. Mais notez que dans le cas général, vous pouvez frapper un problème si le fichier chemin d'accès contient des espaces ou alors:
Lire l'espace, tabulation, saut de ligne et de fin de fichier délimité par des arguments à partir de l'entrée standard et exécuter le spécifiée utilitaire avec comme arguments.
Les arguments sont généralement une longue liste de noms de fichiers (généré par ls
ou find
, par exemple) qui sont passés à xargs
par l'intermédiaire d'un tuyau.
Donc dans ce cas, en supposant que chaque fichier chemin d'accès ne prend qu'une ligne (ce qui est évidemment le cas si il n'y a qu'une seule ligne dans l'ensemble), vous pouvez utiliser la commande suivante NUL
à base de pointe s'appuyant sur l' tr
commande.
Voici la commande que vous aimerais obtenir:
rjp2tif /path/to/rjpeg | tr '\n' '\0' | xargs -0 open -a imagej
Note: j'ai un GNU/Linux OS, de sorte que pouvez-vous confirmer qu'il fonctionne sous macOS?
FTR, ci-dessous est une vaste coquille code permettant de tester les deux modes différents de xargs
: génération d'une commande par ligne-argument (-n1
), ou une commande unique avec tous les arguments d'un seul coup:
$ 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
la commande ci-dessus ne fonctionne sur macOS, merci. J'ai trouvé que le-t
option (trace) pourxargs
est utile pour montrer ce qu'xargs
fait à la commande. Dans le cas ici, quandpath/to/tiff
est passé àxargs
via le tuyau,xargs
réorganise la commande àopen -a imagej path/to/tiff
. Très utile.