Bash

查找函式、命令和內置函式

  • July 1, 2015

可能重複:

在 find -exec 呼叫中執行使用者定義的函式

假設我有以下 bash 程式碼:

!#/bin/bash
function  print_echo (){
   echo "This is print_echo Function" $1;
}
find ./ -iname "*" -exec print_echo {} \;

對於每個-exec命令,我都會收到以下錯誤:

find: `print_echo': No such file or directory

注意:在此之前,我對一個關鍵程序進行了測試,並用另一種算法解決了我的程序,但這是一個問題:為什麼 find 命令不接受內置的 bash 命令和函式名作為參數-exec

find不接受您的函式作為命令,因為它的謂詞-exec從字面上呼叫 C 庫exec函式來啟動程序。您的函式僅對 bash 解釋器本身可用。即使您在.bashrc文件中定義了函式,它也僅對bash.

因此,如果您確實需要使用 find 的-exec一些自定義命令序列執行兩次,請將其放入單獨的腳本文件中或使用其他解決方法。

我不知道為什麼find不喜歡功能。解決方法如下:

#!/bin/bash
function  print_echo (){
   echo "This is print_echo Function" $1;
}

for f in $(find . -iname "*")
do
   print_echo $f
done

更新

上面的腳本不適用於嵌入空格的文件。以下更新會:

#!/bin/bash
function  print_echo (){
   echo "This is print_echo Function" $1;
}

find . -iname "*.sh" | \
while read f
do
   print_echo "$f"
done

引用自:https://unix.stackexchange.com/questions/62221