我的.bashrc有以下功能
function myfile {
file $1
}
export -f myfile
当我直接调用它时,它工作正常
rajesh@rajesh-desktop:~$ myfile out.ogv
out.ogv: Ogg data, Skeleton v3.0
当我尝试通过exec调用它时,它不工作。
rajesh@rajesh-desktop:~$ find ./ -name *.ogv -exec myfile {} \;
find: `myfile': No such file or directory
有没有办法用exec调用bash脚本函数?
任何帮助都是非常感谢的。
更新:
谢谢你的回复,吉姆。
但这正是我首先想要避免的,因为我在我的bash脚本中定义了很多实用函数,我想将它们与其他有用的命令一起使用,比如find -exec。
我完全明白你的观点,find可以运行可执行文件,它不知道传递的参数是脚本中定义的函数。
当我尝试在bash提示符下执行时,我将得到相同的错误。
$ exec myfile out.ogv
我希望可能会有一些巧妙的技巧,可以给exec一些假设的命令,比如"bash -myscriptname -myfunctionname“。
我想我应该尝试找到一些方法来动态创建bash脚本,并使用exec运行它。
发布于 2011-04-14 17:20:23
find ./ -name *.ogv -exec bash -c 'myfile {}' \;
发布于 2012-04-14 15:59:47
我设法让它运行得更优雅一些,比如:
function myfile { ... }
export -f myfile
find -name out.ogv -exec bash -c '"$@"' myfile myfile '{}' \;
请注意,myfile
被提供了两次。第一个参数是脚本的$0
参数(在本例中,基本上可以是任何参数)。第二个参数是要运行的函数的名称。
发布于 2010-06-17 07:13:11
$ cat functions.bash
#!/bin/bash
function myecho { echo "$@"; }
function myfile { file "$@"; }
function mycat { cat "$@"; }
myname=`basename $0`
eval ${myname} "$@"
$ ln functions.bash mycat
$ ./mycat /etc/motd
Linux tallguy 2.6.32-22-core2 ...
$ ln functions.bash myfile
$ myfile myfile
myfile: Bourne-Again shell script text executable
$ ln functions.bash myecho
$ myecho does this do what you want\?
does this do what you want?
$
当然,函数可能比我的示例稍微复杂一些。
https://stackoverflow.com/questions/3056788
复制相似问题