Bash 通过传递参数来捕获函数?

Bash 通过传递参数来捕获函数?,bash,shell,signals,bash-trap,Bash,Shell,Signals,Bash Trap,我一直在到处搜索,我开始相信,除了拥有全局变量之外,没有其他方法可以做到这一点,但我相信stackoverflow.com上的专家可能会帮助我: bash中是否有任何方法通过向函数传递参数来捕获函数? 例如,trap SIGINT?trap允许指定任意命令(或命令序列),但必须将该命令作为单个参数传递。例如,这: trap 'foo bar baz | bip && fred barney ; wilma' SIGINT 将运行以下命令: foo bar baz | bip &

我一直在到处搜索,我开始相信,除了拥有全局变量之外,没有其他方法可以做到这一点,但我相信stackoverflow.com上的专家可能会帮助我:

bash中是否有任何方法通过向函数传递参数来捕获函数?

例如,
trap SIGINT

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
陷阱“”符号
也许我误解了你,但是。。。这是合法的:

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

我不确定我是否正确理解了您的意思,但如果您想让信号处理程序调用函数并传递参数,
trap“function arg1 arg2”信号
应该可以工作。例如,
trap“ls-lh/”INT
将导致shell中的Ctrl+C导致调用
ls-lh/
(带有2个参数的程序)。

实际上我没有使用引号,它不起作用。感谢您的帮助:]更新:仍然没有(查看我在顶部帖子中的评论)只是将双引号更改为单引号,扩展将延迟到执行trap命令,例如使用
trap'echo“$PATH”INT
对路径的任何更改都将对trap函数可见。实际上,自从调用trap之后,它就不起作用了“myfunction$arg_1$arg_2“SIGINT SIGTERM意味着当按下Ctrl-C时,$arg_1$arg_2的旧值将保留,而不是更新值。我想我会使用包装函数或使参数全局化,因为我无法按照我的预期方式工作:/P.S.:我使用双引号而不是像您的示例中那样使用单引号有关系吗?@kounani:正如您所猜测的——您需要使用单引号,而不是双引号。是的!单引号成功了!可能我在gVim中的插件需要更新,因为我有bash支持,我认为如果它是正确的,它将“正确着色”。穆乔·格雷西亚斯·帕尔!:)@克乌努瓦尼:不客气!为了澄清,单引号和双引号都可以分隔字符串,但双引号允许在字符串中进行反斜杠处理和参数扩展,而单引号则不允许。因此,例如,如果变量
$x
是星号,则
echo$x
列出当前目录中的文件,
echo“$x”
打印星号,
echo'$x'
打印美元符号和x。谢谢!我也会记住这一点,因为这听起来很有用:]只有单引号可以处理$arg1、$arg2等类型的变量。但是,是的,这正是我需要的!;)我很高兴迈克尔把它解释得如此透彻,你把它解决了