通过传递参数捕获函数?

时间:2012-02-29 18:32:42

标签: bash shell signals bash-trap

我一直在各地搜索,我开始相信除了拥有全局变量之外别无他法,但我相信stackoverflow.com中的大师可以帮助我:

bash中是否有通过向其传递参数来捕获函数的方法? 例如,trap <function_name> <arg_1> <arg_2> SIGINT

3 个答案:

答案 0 :(得分:19)

trap允许您指定任意命令(或命令序列),但您必须将该命令作为单个参数传递。例如,这个:

trap 'foo bar baz | bip && fred barney ; wilma' SIGINT

将运行此:

foo bar baz | bip && fred barney ; wilma

每当shell收到SIGINT时。在你的情况下,它听起来像你想要的:

trap '<function> <arg_1> <arg_2>' SIGINT

答案 1 :(得分:2)

也许我误解了你,但......这是合法的:

trap "cp /etc/passwd $HOME/p" SIGINT
trap 'cp /etc/passwd /tmp/p; echo wooo hoo' SIGINT

答案 2 :(得分:1)

我不确定我是否正确理解你的意思,但是如果你想让信号处理程序调用一个函数并传递参数,那么trap "function arg1 arg2" SIGNAL应该可行。例如,trap "ls -lh /" INT将导致shell中的Ctrl + C导致调用ls -lh /(带有2个args的程序)。