Kounavi
Kounavi

Reputation: 1121

Trap function by passing arguments?

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

Answers (3)

ruakh
ruakh

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

Michał Kosmulski
Michał Kosmulski

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

rsaw
rsaw

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

Related Questions