ImageJ için dosya yolunu aç

0

Soru

Küçük bir komut satırı yardımcı programım var rjp2tif bu, bir jpeg dosyasındaki radyometrik verileri bir tıff dosyasına ayıklar. Dosya yolunu komut satırında Imagej'e aktarabilmeyi ve ımagej'in tıff dosyasını açmasını umuyordum. Bu amaçla, rjp2tif tıff dosyasının dosya yolunu standart çıktıya yazar. Bash'ta aşağıdakileri denedim:

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

ve

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

İlki Imagej'i açar ancak dosyayı açmaz. İkincisi, içinde dosya yolu olan bir metin penceresi bulunan Imagej'i açar.

Bu macOS Monterey'de, ama bunun önemli olduğunu sanmıyorum. Herkes bunu yapmak ve başarılı çalıştı. TIA.

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

En iyi cevabı

1

Varsayarsak rjp2tif komut, standart çıktıda bir dosya yolu döndürür ve bu çıktıyı normal bir CLI bağımsız değişkeni olarak başka bir komuta aktarmak istiyorsanız, ilginizi çekebilirxargs komut. Ancak, genel durumda, dosya yolu boşluk içeriyorsa bir sorunla karşılaşabileceğinizi unutmayın:

Boşluk, sekme, satırsonu ve dosya sonu ile sınırlandırılmış bağımsız değişkenleri standart girdiden okuyun ve belirtilen yardımcı programı bağımsız değişken olarak yürütün.
Bağımsız değişkenler genellikle dosya adlarının uzun bir listesidir (tarafından oluşturulur ls veya find örneğin) iletilir xargs bir borudan.

Bu durumda, her dosya yolunun yalnızca bir satır aldığını varsayarsak (ki bu genel olarak yalnızca bir satır varsa açıktır), aşağıdakileri kullanabilirsiniz NUL- dayalı ipucu güvenerektr komut.

İşte alacağınız komut:

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

Not: Bir GNU / Linux işletim sistemim var, bu yüzden lütfen macOS altında çalıştığını onaylayabilir misiniz?

FTR, aşağıda iki farklı modun test edilmesine izin veren kapsamlı bir kabuk kodudur. xargs: satır bağımsız değişkeni başına bir komut oluşturma (-n1) veya tek seferde tüm satır argümanlarına sahip tek bir komut:

$ 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 Evet, tr yukarıdaki komut Macos'ta çalışıyor, teşekkürler. Bunu buldum -t seçenek (izleme) xargs ne olduğunu göstermek için yararlıdır xargs komut yok. Buradaki durumda, ne zaman path/to/tiff iletilir xargs borudan, xargs komutu yeniden düzenler open -a imagej path/to/tiff. Çok yararlı.
Jim Merkel

@ErickMD Yukarıda bahsettiğiniz bir başka şey, standart çıktıya bir satır var rjp2tif bu borulu xargs. Bununla birlikte, eğer kullanırsam standart çıktıya birçok satır olabilir -v seçeneği rjp2tif. Kullanırsam bu da işe yarayabilir tee /dev/tty ekrandaki tüm satırları göstermek için tail -n 1 sadece borulama için son satırı almak için xargs. Bu durumda komut satırı: rjp2tif -v /path/to/rjpeg | tee /dev/tty | tail -n 1 | xargs open -a imagej. Dışarıda bıraktım tr sadeleştirme komutu.
Jim Merkel

Evet, ama xargs cevabımda bahsettiğim gibi girişte birden fazla satırı da destekleyebilir ve bu durumda 2 seçeneğiniz vardır: birini çalıştırın open her dosya için komut → xargs -0 -n1 open -a imagej; veya tek bir tane çalıştırın open args olarak geçirilen tüm dosyalarla komut → xargs -0 open -a imagej. Yani ihtiyacın yok tail -n 1 hiç (tabii ki tek bir dosyayla ilgilenmediğiniz sürece)
ErikMD

Aslında sanırım sözünüzü yanlış yorumladım: -v seçenek, birkaç dosya yolunuz yok, ancak yalnızca stdout'tan kaldırılabilen bazı ek "gürültü" ler var tail -n 1, gerçekten.
ErikMD

Evet, rjp2tif şu anda sadece bir dosyayla çalışıyor. Bu -v ayrıntı için. Yani "gürültü", dosya için meta verilerin çıktısıdır. Sanırım yapmaya çalışabilirim. rjp2tif birden çok dosya için çalışın.
Jim Merkel

Diğer dillerde

Bu sayfa diğer dillerde

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