将find放在bash_profile函数中

时间:2012-09-10 04:31:01

标签: .bash-profile bash

我想在我的.bash_profile中创建bash函数,它基本上是find ./ -name $1,非常简单的想法,似乎不起作用。我的尝试不能以正确的方式打印东西,例如:

find_alias() {
     `find ./ -name $1 -print`                                                                                                                                                                           
 }
 alias ff='find_alias $1'

以上如果我做ff *.xml之类的话,我会得到以下一个内容:

  

bash:.pom.xml:权限被拒绝

之后:

find_alias() {
    echo -e `find ./ -name $1 -print`
}
alias ff='find_alias $1'

确实找到了所有这些,但是把它的输出放在一条很长的线上,我在这里做错了什么?

2 个答案:

答案 0 :(得分:2)

find_alias() {
  find ./ -name $1 -print
}

你不需要也不想要反引号。那会尝试执行find命令返回的内容。

答案 1 :(得分:1)

反引号使shell处理其内部输出作为应执行的命令。如果您尝试´echo "ls"´,那么它将首先执行echo "ls",获取文本ls的输出,然后执行列出所有文件。

在您的情况下,您正在执行find ./ -name *.xml -print的文本结果,这是匹配文件的列表。当然没有任何意义,因为匹配的文件名(在大多数情况下)不是命令。

您获得的输出意味着两件事:

  • 你试图从pom.xml执行脚本(就像你输入的那样) ./pom.xml) - 毫无意义
  • 您没有执行权 那个档案

因此,正如@Mat建议的那样,解决问题的简单方法是删除反引号并让find的输出显示在终端中。