如何使用过滤器运行可执行程序

如何使用过滤器运行可执行程序

我想运行一个 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 ./'{}' \;

相关内容