Ловить функцию, передавая аргументы? - PullRequest
10 голосов
/ 29 февраля 2012

Я искал везде, и я пришел к выводу, что нет другого способа сделать это, кроме наличия глобальных переменных, но я уверен, что гуру в stackoverflow.com могут мне помочь:* Есть ли в bash способ перехватить функцию, передав ей аргументы?Например, trap <function_name> <arg_1> <arg_2> SIGINT?

Ответы [ 3 ]

19 голосов
/ 29 февраля 2012

trap позволяет вам указать произвольную команду (или последовательность команд), но вы должны передать эту команду как один аргумент. Например, это:

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

запустит это:

foo bar baz | bip && fred barney ; wilma

всякий раз, когда оболочка получает SIGINT. В вашем случае это звучит так, как вы хотите:

trap '<function> <arg_1> <arg_2>' SIGINT
2 голосов
/ 29 февраля 2012

Может быть, я вас неправильно понимаю, но ... это законно:

trap "cp /etc/passwd $HOME/p" SIGINT
trap 'cp /etc/passwd /tmp/p; echo wooo hoo' SIGINT
1 голос
/ 29 февраля 2012

Я не уверен, что правильно понимаю, что вы имеете в виду, но если вы хотите, чтобы обработчик сигнала вызывал функцию и передавал ей параметры, trap "function arg1 arg2" SIGNAL должно работать.Например, trap "ls -lh /" INT приведет к тому, что Ctrl + C в вашей оболочке вызовет ls -lh / (программу с 2 аргументами).

...