2013-05-18 98 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 - 和第一賽後將退出,所以只能打開第一個文件。