按下 Ctrl-C 时,在 zsh 中运行一个又一个命令

rav*_*ill 5 zsh signals alias

我最近搬到zshfrom bash(在 OSX 上)。我有一个 bash 别名,我用来在 bash 上运行一个程序然后另一个程序(即使以前的程序因错误退出)。我不知道如何在 zsh 中复制它。

我想复制的 bash 别名是:

gulp ; say "Gulp has crashed"
Run Code Online (Sandbox Code Playgroud)

有谁知道如何在 zsh 中重写它?

编辑:

zsh和bash我得到的区别在于;ctrl-c在 gulp 运行时按下 Bash ,停止 gulp,然后继续执行下一个命令。

在 Zsh 中按下ctrl-c似乎停止了整个命令行。

我使用此行的目的是在 gulp 在后台停止运行时获得声音警告。(对于非 mac 用户,say 命令是文本到语音转换器)

jim*_*mij 4

我建议使用一个函数来代替:

mygulp () { trap : INT; gulp || say "Gulp has crashed"; }
Run Code Online (Sandbox Code Playgroud)

将trap捕获Ctrl-C(“中断”信号)并运行:命令(即什么也不做)。

||另请注意;,如果gulp正常退出(您没有按 ctrl-c),则不会发生任何事情,但如果退出代码不为零,则say命令将启动。

bash此功能应该在和中都有效zsh,在后面您可以;在关闭右括号之前删除最后一个。

  • 请注意,当函数退出时,陷阱仍然存在。为了避免这种可移植性,请使用“mygulp () (…)”在子 shell 中运行函数代码。或者,在 zsh 中,在函数中运行“setopt local_traps local_opions”。 (2认同)