我写了一个bash脚本:
#!/bin/bash
function test_echo
{
echo $0
echo $1
echo $2
echo $#
}
test_echo
我试试:
find test.sh -type f -exec test_echo '{}' \;
或
find . -type f -exec `./test.sh {}` \;
但它不起作用。
我需要一种方法来扫描文件夹中的文件(我使用find),并为每个文件调用一个函数(foo_fonction()),在参数中包含文件的完整路径。
find . -type f -exec foo_fonction '{}' \;
如何在foo_fonction()中使用参数(完整路径)?
答案 0 :(得分:1)
查找无法执行内部命令。
它只能执行磁盘上的命令。
解释很简单:当进程find
启动时,它无法在启动它的进程的环境中看到(在这种情况下由bash
分叉)内部命令。
进程bash
在查找$ PATH的环境中传递,但不传递它的内部。
您需要将该函数添加到file.sh
中,使其成为可执行文件,在$ PATH [like“中添加脚本的路径。如果pwd
的{{1}}与bash
]的位置相同,则在这些条件下执行。
答案 1 :(得分:0)
有两种方法可以解决这个问题:
1:您可以将函数定义作为查找文件脚本的一部分:
(我们称之为find_stuff.sh
)
#!/bin/bash
test_echo() {
echo $0
echo $1
echo $2
echo $#
}
files=$(find $(pwd) -type f)
for f in $files
do
test_echo "$f"
done
解释这是做什么的:
./find_stuff.sh
test_echo()
函数$(pwd)
指定为搜索目录,这将是一个绝对路径,find
返回的结果也将是绝对路径 - 正如您所希望的那样。test_echo
函数 2:将函数定义放在其他位置,但仍需要find_stuff.sh
脚本:
#!/bin/bash
files=$(find $(pwd) -type f)
for f in $files
do
./test.sh "$f"
done
和test.sh
应如下所示:
#!/bin/bash
test_echo () {
echo $0
echo $1
echo $2
echo $#
}
test_echo $@
请注意最后一行test_echo $@
- $@
部分是您之前缺少的部分。