2013-05-18 54 views
1

我想通过bash代码管道文件名到eog。Bash:管道到eog

这是我的代码:ls | grep "sample" | head -1其中sample是所需文件的名称。

我很难弄清楚如何将输出管道连接到eog。

我试着将上面代码的输出存储到一个变量,然后将该变量传递给eog失败。

有什么建议吗?

+0

什么是'eog'?一份文件?一个程序?为了我的钱,将代码编写为shell脚本并使其可执行;如果失败了,请将其作为功能。 –

+0

只是为了澄清:你是否想用文件名作为参数调用eog,还是要将文件名写入eog的stdin?我不认为后者会完成任何事情。 – sepp2k

+0

@JonathanLeffler:[Eye of GNOME](http://projects.gnome.org/eog/),一个图像查看器。 – hammar

回答

1

这是你在找什么?

ls | grep "sample" | head -1 | xargs eog 
+0

谢谢你的帮助。这就是我一直在寻找的。 – mundomug

1

eog(“侏儒的眼睛”)不会让你管道文件进入它。您必须提供文件名作为命令行参数。

如果只有一个匹配的文件名,你可以只需键入:

eog *sample* 

但是,这将有一个显示在当前目录中名称包含单词sample所有文件的效果。这不是我清楚你为什么会想到的第一个字母,例如文件,以显示一个,但你可以这样写:

eog $(ls *sample* | head -n1) 

你可能更愿意找到一个更具体的模式,虽然。

+0

谢谢。你的解决方案和@linuts的解决方案都可以工作。 – mundomug

3

可以说,比从ls解析输出有时会出错(例如空格或换行符的文件名),所以你可以尝试下:

find . -iname '*sample*' -exec eog '{}' \; -quit 

或限制到当前目录

find . -maxdepth 1 -iname '*sample*' -exec eog '{}' \; -quit 

上面会找到任何文件包含什么“样本”(不区分大小写 - 使用-name为区分大小写),并在其上运行eog - 和第一赛后将退出,所以只能打开第一个文件。