linux - 启动时忽略 csh 中的信号

标签 linux bash shell signals csh

我对 Linux 还是很陌生,但我对 SSH 和 PUTTY 的概念更陌生。在我通过 SSH 进入 linux box 后,我启动了以下命令:

csh -c 'cd /; set echo off; set term=dumb; set echo on; pwd; csh -i'

这一切都很好,除了信号中断引起的头痛,例如 Ctrl+C。我做了研究并得出以下结论:

  1. 在 csh 中,onintr - 可用于阻止给定脚本中的信号。这让我想到将 onintr - 放入 cshrc 文件中:这样它会在我每次运行上述命令时执行。但该行仅适用于一个脚本,因此它不会像我想要的那样具有任何真正的全局效果。

  2. 我发现 bash 与 csh 不同,它有 trap 命令 - 一个非脚本特定的命令,它将重新定义在整个 shell session 期间如何处理某些信号。命令。所以我尝试启动 bash 并修改代码以适应。查看 bash 手册页,我解释了 bash -c 的行为与 csh -c 的行为大致相同,因此为了复制上述命令,我尝试替换 cshbash 并将 trap ""2 附加到命令。

因此,完整的命令是:

bash -c' cd /; set echo off; set term=dumb; set echo on; pwd; bash -i; trap "" 2'

但是 bash -c 的行为不一定像 csh -c,至少在这种情况下是这样。


我对如何解决这个问题意见不一。 如何让 shell 默认忽略 Ctrl+C? 我应该将 onintr - 放入 cshrc 中吗?或者我会更好地使用 bash 并运行 trap 命令?我应该如何实现更好的解决方案?

最佳答案

虽然我不完全明白你为什么要使用像

这样的语句

bash -c ' cd /; set echo off; set term=dumb; set echo on; pwd; bash -i;'

你可以在 bash -i 之前放置 trap,以防止 bash -i 接收信号,如下所示:

bash -c ' cd /; set echo off; set term=dumb; set echo on; pwd; trap "" 2; bash -i;'

关于linux - 启动时忽略 csh 中的信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18234232/

相关文章:

linux - 如何将程序和文件的组合输出显示为表格并在 1 秒内观看

shell - 在容器中时如何从主机复制到容器

linux - 为什么我的某些输出文件中会写入随机空字符?

python - 多个进程异步读取同一管道

linux - 当我使用 vscode Remote-SSH 扩展连接到远程服务器时,我发现 vscode 无法在主机上安装 vscode-server

linux - 使用其他服务器中 createrepo 创建的本地 yum 存储库

arrays - 在 bash 中使用数组时变量未正确替换

regex - 如何 grep/sed/awk 获取以空白字符开头的一系列输出

linux - 通过另一个列 shell 输出一个列组

linux - 将 bash shell 变量传递给 Makefile?