【发布时间】:2012-02-29 18:32:41
【问题描述】:
我一直在到处搜索,我开始相信除了拥有全局变量之外别无他法,但我相信 stackoverflow.com 中的大师可能会帮助我:
在 bash 中是否有任何方法可以通过向函数传递参数来捕获函数?
例如,trap <function_name> <arg_1> <arg_2> SIGINT?
【问题讨论】:
标签: bash shell signals bash-trap
我一直在到处搜索,我开始相信除了拥有全局变量之外别无他法,但我相信 stackoverflow.com 中的大师可能会帮助我:
在 bash 中是否有任何方法可以通过向函数传递参数来捕获函数?
例如,trap <function_name> <arg_1> <arg_2> SIGINT?
【问题讨论】:
标签: bash shell signals bash-trap
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
【讨论】:
$x 是一个星号,那么 echo $x 列出当前目录中的文件,echo "$x" 打印一个星号,echo '$x' 打印一个美元符号和一个 X。
也许我误解了你,但是……这是合法的:
trap "cp /etc/passwd $HOME/p" SIGINT
trap 'cp /etc/passwd /tmp/p; echo wooo hoo' SIGINT
【讨论】:
我不确定我是否正确理解你的意思,但如果你想让信号处理程序调用一个函数并传递参数,trap "function arg1 arg2" SIGNAL 应该可以工作。例如,trap "ls -lh /" INT 将导致您的 shell 中的 Ctrl+C 导致调用 ls -lh /(具有 2 个参数的程序)。
【讨论】:
trap 'echo "$PATH"' INT 对 PATH 的任何更改对陷阱函数都是可见的。