Tubo filepath ImageJ

0

Domanda

Ho un po ' di utilità della riga di comando rjp2tif che estrae dati radiometrici da un file jpeg in un file tiff. Speravo di essere in grado di tubo il percorso per ImageJ sulla riga di comando e hanno ImageJ aprire il file tiff. A tal fine, rjp2tif scrive il percorso del file tiff a standard output. Ho provato le seguenti in bash:

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

e

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

Il primo apre ImageJ ma non apre il file. Il secondo si apre ImageJ con una finestra di testo con il percorso del file in esso.

Questo è su macOS Monterey, ma io non credo che le questioni. Qualcuno ha provato a fare questo e stato un successo? TIA.

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

Migliore risposta

1

Supponendo che il rjp2tif il comando restituisce un file-percorso di uscita standard, e si desidera passare questa uscita come una normale CLI argomento ad un altro comando, si può essere interessati in xargs comando. Ma è da notare che nel caso generale, si può colpire qualche problema se il percorso del file contiene spazi o così:

Leggi di spazio, tab, newline e di fine del file delimitato argomenti da standard input e di eseguire specificato utilità con loro come argomenti.
Gli argomenti sono in genere un lungo elenco di nomi di file (generato da ls o find, per esempio) che passa per xargs tramite un tubo.

Quindi, in questo caso, supponendo che ogni percorso del file richiede solo una linea (che è, ovviamente, il caso, se c'è solo una linea generale), è possibile utilizzare la seguente NULbasato su suggerimento affidamento sulla tr comando.

Qui è il comando che vuoi ottenere:

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

Nota: ho una GNU/Linux OS, in modo da potete per favore confermare che funziona sotto macOS?

FTR, sotto è un sistema completo di guscio un codice che permette di testare le due diverse modalità di xargsla generazione di un comando per linea-argomento (-n1), o di un singolo comando con tutti gli argomenti in un solo colpo:

$ 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 Sì, l' tr comando di cui sopra non funziona su macOS, grazie. Ho trovato che il -t opzione (traccia) per xargs è utile per mostrare ciò che xargs non a comando. Nel caso qui, quando path/to/tiff è passato xargs tramite il tubo, xargs riorganizza il comando open -a imagej path/to/tiff. Molto utile.
Jim Merkel

@ErickMD Una cosa, non è detto sopra che c'è una riga di output standard da rjp2tif che è stato reindirizzato a xargs. Tuttavia ci potrebbero essere molte linee di output standard, se io uso un -v opzione per rjp2tif. Questo può funzionare anche se io uso tee /dev/tty per mostrare tutte le linee sullo schermo, seguito da tail -n 1 per ottenere l'ultima riga per tubazioni xargs. In questo caso la riga di comando è: rjp2tif -v /path/to/rjpeg | tee /dev/tty | tail -n 1 | xargs open -a imagej. Ho lasciato fuori il tr comando per la semplificazione.
Jim Merkel

Sì, ma xargs possibile anche il supporto di più linee in ingresso come ho detto nella mia risposta, e si hanno 2 scelte in questo caso: esecuzione di uno open comando per ogni file → xargs -0 -n1 open -a imagej; o l'esecuzione di una singola open comando con tutti i file passati come argomenti → xargs -0 open -a imagej. Quindi non c'è bisogno tail -n 1 a tutti (a meno che non siete interessati in un solo file, ovviamente)
ErikMD

In realtà credo che ho frainteso la tua affermazione: con il -v opzione, non si dispone di diversi file-percorsi coinvolti, ma solo alcune ulteriori "rumore" che può essere rimosso dal stdout utilizzando tail -n 1infatti.
ErikMD

Sì, rjp2tif funziona con un file alla presente. Il -v è per verbose. Così il "rumore" è una stampa dei metadati per i file. Potrei provare a fare rjp2tif lavoro per più file.
Jim Merkel

In altre lingue

Questa pagina è in altre lingue

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