如何使用過濾器運行可執行程序

如何使用過濾器運行可執行程序

我想運行一個 shell 腳本。這個腳本的名字很長。所以我想對文件使用過濾器。

前任:ls | grep myfile | ./

是否可以執行帶有過濾器的檔案。

答案1

只需輸入:

*myfile*

您也可以這樣做:

"$(ls | grep pattern)"

如果您完整的正規表示式符合而不僅僅是檔案名稱通配符。

所有這些解決方案都假設當前目錄中只有一個檔案與該模式相符。

答案2

您可以使用xargs對於這類事情:

ls | grep myfile | xargs sh

xargs讀取其輸入上的行並將它們作為參數提供給作為參數給出的程式:在這裡,它將讀取 grep 的輸出,然後運行sh long_myfile_name。 (如果您的腳本依賴 Bash 特定功能或其他一些 shell,請更改sh為)bash

在這個簡單的情況下,您也可以運行sh *myfile*基本上相同的效果 - 如果您的grep情況更複雜,您可能無法做到這一點,但sh "$(ls | grep ...)"會起作用。


也就是說,有一些原因您可能不想這樣做:特別是,如果在某個時候可能有兩個文件與您的grep.此時將發生以下三件事之一:您的腳本獲得額外的參數,執行兩個不同的腳本,或執行另一個腳本。例如,您可以透過管道來head -n 1避免前兩個,但隨後將執行任意一個,這沒有多大幫助。在這種$()情況下,它只會失敗,這可能是一系列糟糕結果中最好的結果。如果檔案名稱中有空格,您就必須更加小心。

shell 的製表符補全可能是更好的選擇:您可以編寫*myfile*並點擊 TAB 來獲得正確的擴展或指示存在不止一種可能性,或者甚至只是開始寫名稱和製表符補全到最後。如果您在腳本中運行它,只需將全名放在那裡 - 您只需編寫一次。上面的答案會起作用,但我真的不推薦它。

答案3

你可以使用xargs例如

ls | grep myfile | xargs bash

或使用過濾器find

find ./ -maxdepth 1 -name "myfile" -exec ./'{}' \;

相關內容