Jor*_*geO 22 linux error-handling bash
在某种try/catch形式中,我想执行一个在发生错误时不会停止的bash.
特定的bash是:
#!/bin/sh
invoke-rc.d tomcat stop
rm -fr /var/webapps/
cp -R $WEBAPP /var/webapps/
invoke-rc.d tomcat start
Run Code Online (Sandbox Code Playgroud)
我想exec"invoke-rc.d tomcat stop",即使Tomcat没有运行,继续执行其他bash命令.
Tim*_*ost 31
尝试:
invoke-rc.d tomcat stop > /dev/null 2>&1 || true
Run Code Online (Sandbox Code Playgroud)
一点背景:
user@tower: # true
user@tower: # echo $?
0
user@tower: # false
user@tower: # echo $?
1
user@tower: # which true
/bin/true
user@tower: # which false
/bin/false
Run Code Online (Sandbox Code Playgroud)
在真正的解决方案是在看tomcat的启动脚本,看看它是如何知道如果Tomcat运行:)这样的话,你不纠缠不必要它.
有关取消设置/设置+ e的其他建议,请参阅此帖子.虽然它可以解决您的直接问题,但您可能会发现在自己的脚本中需要最近未设置的行为,尤其是在您复制文件时.
除了使Makefile在各种构建环境中表现得如预期之外,这是造成真假的最大原因之一.
另外,set + e不是完全可移植的,即某些版本的Solaris(甚至是Dash)..但我怀疑这是一个值得关注的问题.
Ada*_*eld 28
禁用"立即退出"选项set +e,运行您的命令,然后可选择重新启用它set -e:
set +e
invoke-rc.d tomcat stop
set -e # optional
Run Code Online (Sandbox Code Playgroud)
有关内置及其所有各种选项(其中有许多选项)的说明,请参阅Bash手册的第4.3.1节set.
| 归档时间: |
|
| 查看次数: |
43567 次 |
| 最近记录: |