首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >管道文件到ImageJ

管道文件到ImageJ
EN

Stack Overflow用户
提问于 2021-11-23 23:05:07
回答 1查看 110关注 0票数 1

我有一个小的命令行实用程序rjp2tif,它将辐射测量数据从jpeg文件提取到tiff文件中。我希望能够将文件传输到命令行上的ImageJ,并让ImageJ打开tiff文件。为此,rjp2tif将tiff文件的文件路径写入标准输出。我在bash尝试了以下几种方法:

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

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

第一个打开ImageJ,但不打开文件。第二个打开带有文件路径的文本窗口的ImageJ。

这是在macOS蒙特利,但我认为这不重要。有人想这么做却成功了吗?蒂娅。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-24 11:12:43

假设rjp2tif命令在标准输出中返回文件路径,并且希望将此输出作为常规的CLI参数传递给另一个命令,那么您可能对xargs命令感兴趣。但请注意,在一般情况下,如果文件路径包含空格左右,则可能会遇到一些问题:

从标准输入中读取空格、制表符、换行符和文件尾分隔参数,并使用它们作为参数执行指定的实用程序。

这些参数通常是一个很长的文件名列表(例如,由lsfind生成),通过管道传递给xargs

因此,在本例中,假设每个文件路径只使用一行(如果整个文件路径只有一行,则显然是这样),您可以依赖于NUL命令使用下面的tr提示。

下面是您将获得的命令:

代码语言:javascript
复制
rjp2tif /path/to/rjpeg | tr '\n' '\0' | xargs -0 open -a imagej

注意:我有一个GNU/Linux,所以请您确认它在macOS下工作吗?

下面是一个完整的shell代码,允许测试两种不同的xargs模式:每行参数生成一个命令(-n1),或者一次生成一个包含所有行参数的命令:

代码语言:javascript
复制
$ 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" 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70088899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档