Reputation: 1121
I've been searching everywhere and I've come to believe that there is no way to do that other than having global variables but I believe the guru's in stackoverflow.com may be able to help me:
Is there any way in bash to trap a function by passing arguments to it?
For example, trap <function_name> <arg_1> <arg_2> SIGINT
?
Upvotes: 18
Views: 16857
Reputation: 183280
trap
lets you specify an arbitrary command (or sequence of commands), but you have to pass that command as a single argument. For example, this:
trap 'foo bar baz | bip && fred barney ; wilma' SIGINT
will run this:
foo bar baz | bip && fred barney ; wilma
whenever the shell receives SIGINT. In your case, it sounds like you want:
trap '<function> <arg_1> <arg_2>' SIGINT
Upvotes: 32
Reputation: 10020
I'm not sure I understand correctly what you mean, but if you want to make a signal handler call a function and pass it parameters, trap "function arg1 arg2" SIGNAL
should work. For example trap "ls -lh /" INT
will cause Ctrl+C in your shell to result in ls -lh /
(program with 2 args) being called.
Upvotes: 1
Reputation: 3537
Maybe I'm misunderstanding you, but ... this is legal:
trap "cp /etc/passwd $HOME/p" SIGINT
trap 'cp /etc/passwd /tmp/p; echo wooo hoo' SIGINT
Upvotes: 3