小编Jol*_*lta的帖子

如何在 bash 脚本中正确捕获 SIGQUIT?

我可以编写可以很好地捕获的 shell 脚本SIGINT,但我似乎无法捕获SIGQUIT.

#!/bin/bash

function die {
    echo "Dying on signal $1"
    exit 0
}

trap 'die "SIGINT"' SIGINT
trap 'die "SIGQUIT"' SIGQUIT

while true; do
    echo "sleeping..."
    sleep 5
done
Run Code Online (Sandbox Code Playgroud)

执行此脚本并按下CTRL-C具有所需的效果,但是按下CTRL-\(据我所知,应该触发)除了在终端中SIGQUIT打印之外没有任何作用。^\为什么?

我有两个运行理论。首先,SIGINT和 的语义SIGQUIT不同,SIGQUIT仅发送到子进程sleep,而同时SIGINT发送到子进程和父 bash 进程。如果是这种情况,它在哪里记录?

我的第二个理论是 bash 不仅默认忽略(即有一个无操作处理程序)SIGQUIT(如手册页所示),而且根本不允许它被捕获。该理论与第一个理论重叠,因为父级和子级都可能出现这种情况SIGQUIT,但父级 ( bash) 无法捕获它。如果是这种情况,有什么方法可以捕获SIGQUITbash 脚本吗?...也许shopt我可以设置一些?

编辑:这是在 Ubuntu 10.10 上的 …

unix bash signals exit bash-trap

5
推荐指数
1
解决办法
5726
查看次数

在处理SIGINT后阻止bash脚本终止

我正在为应用程序编写一个bash包装器.该包装器负责更改用户,运行软件和记录其输出.我也希望它传播SIGINT信号.

到目前为止,这是我的代码:

#!/bin/bash
set -e; set -u

function child_of {
    ps --ppid $1 -o "pid" --no-headers | head -n1
}

function handle_int {
    echo "Received SIGINT"
    kill -int $(child_of $SU_PID)
}

su myuser -p -c "bash /opt/loop.sh 2>&1 | tee -i >(logger -t mytag)" &
SU_PID=$!

trap "handle_int" SIGINT

wait $SU_PID
echo "This is the end."
Run Code Online (Sandbox Code Playgroud)

我的问题是,当我向这个包装器发送一个SIGINT时,handle_int会被调用但是脚本结束了,而我希望它继续等待$SU_PID.

有没有办法捕获int信号,做一些事情,然后阻止脚本终止?

linux bash signals bash-trap

5
推荐指数
1
解决办法
1416
查看次数

检查脚本中的SSH故障

嗨,什么是检查SSH是否因任何原因失败的最佳方法?我可以使用IF语句(如果它失败的话做什么),我在一个循环中使用ssh命令和传递我的主机名形成一个平面文件.

所以我做了类似的事情:

for i in `cat /tmp/hosts` ; do ssh $i 'hostname;sudo ethtool eth1'; done
Run Code Online (Sandbox Code Playgroud)

我得到这个错误或我无法连接

ssh: host1 Temporary failure in name resolution
Run Code Online (Sandbox Code Playgroud)

我想跳过无法连接的主机是SSH失败.做这个的最好方式是什么?是否存在运行时错误,我可以陷阱绕过无论出于何种原因我无法进入的主机,也许ssh是不允许的,或者我没有正确的密码?

提前谢谢你干杯

ssh bash loops runtime-error

5
推荐指数
2
解决办法
1万
查看次数

如何从Java代码中读取环境变量

我有需要加载到java并发程序的属性文件.路径的一部分由系统环境变量JAVA_TOP定义.当我给出它识别的完整路径时.否则它不会.我试着给文件路径

<JAVA_TOP>/abc.... 
$JAVA_TOP/abc...
JAVA_TOP/abc
Run Code Online (Sandbox Code Playgroud)

他们似乎都没有工作.请让我知道如何从java应用程序中读取环境变量JAVA_TOP.

java environment-variables

5
推荐指数
1
解决办法
3926
查看次数

Bash Trap:如何获取非零状态子进程的行号

对于 Bash 程序:

 1  #!/bin/bash
 2  
 3  trapinfo()
 4  {
 5     echo "=== Trap Info: Status=$? LINENO=$@ A=$A"
 6  }
 7  
 8  main()
 9  {
10     trap 'trapinfo $LINENO -- ${BASH_LINENO[*]}' ERR
11  
12     set -e
13     set -E
14     set -o errtrace
15     shopt -s extdebug
16  
17     local -g A=1
18  
19     # false        # If uncommented, LINENO would be 19
20     (exit 73)      # LINENO is 9. How can I get 20 instead?
21  
22     A=2
23 …
Run Code Online (Sandbox Code Playgroud)

linux bash shell centos7 bash-trap

5
推荐指数
1
解决办法
413
查看次数

rmarkdown::render_site(encoding = "UTF-8") 中出现错误:找不到站点生成器。""

我尝试在RStudio中开始bookdown。我下载了 bookdown-minimal-master。加载后,我单击“构建书籍”按钮。然后我收到错误消息index.Rmd

Error in rmarkdown::render_site(encoding = "UTF-8") : No site generator found.

出了什么问题?

rstudio r-markdown bookdown

5
推荐指数
0
解决办法
2001
查看次数

某种Ruby"中断"

所以这就是我正在做的事情 - 我有一个ruby脚本,每分钟打印出信息.我还为陷阱设置了一个proc,这样当用户点击ctrl-c时,进程就会中止.代码看起来像这样:

switch = true

Signal.trap("SIGINT") do
    switch = false
end

lastTime = Time.now

while switch do
    if Time.now.min > lastTime.min then
        puts "A minute has gone by!"
    end
end
Run Code Online (Sandbox Code Playgroud)

现在代码本身是有效的并且运行良好,但它会做很多无用的工作,switch尽可能经常地检查它的值.它耗尽了尽可能多的处理器(至少是一个核心的100%),所以它非常浪费.我怎样才能做类似的事情,每隔一段时间更新一次事件,而不浪费大量的周期?

所有帮助表示赞赏,并提前致谢!

ruby signals exception-handling

4
推荐指数
1
解决办法
2533
查看次数

如何在Shell脚本中捕获exit 1信号?

我想尝试捕获信号 1 但失败

#!/bin/bash
# capture an interrupt # 0
trap 'echo "Exit 0 signal detected..."' 0
trap 'echo "Exit 1 signal detected..."' SIGHUP

# display something
echo "This is a checkpoint 1"
exit 1

echo "This is checkpoint 2"
# exit shell script with 0 signal
exit 0

Output--
kithokit@15:02:55 trunk (master) $ ./test.sh 
This is a checkpoint 1
Exit 0 signal detected...
kithokit@15:03:44 trunk (master) $ 
Run Code Online (Sandbox Code Playgroud)

即使是退出1,它总是陷入陷阱0,有人知道如何解决这个问题吗?

谢谢

shell signals exit-code bash-trap

4
推荐指数
1
解决办法
2万
查看次数

使用snmptrap时指定端口

我正在尝试通过snmptrap发送陷阱时指定端口.只是为了测试我的SNMP接收器,我想向它发送陷阱,但我无法访问端口162.如何将陷阱发送到另一个端口?

在我看来,man-page没有描述这个选项.

(我不完全理解snmptrap消息的部分是什么,所以如果有人想解释它会很好)

port snmp net-snmp

4
推荐指数
1
解决办法
6357
查看次数

直通估算器(STE)的概念

我在许多与神经网络相关的论文(例如thisthis)中直接看过估计器(STE)。但是我不明白这个概念。我想知道是否有人可以解释STE或让我参考简单的资源?

backpropagation neural-network

4
推荐指数
1
解决办法
3895
查看次数