我是shell脚本中的菜鸟.如果命令失败,我想打印一条消息并退出我的脚本.我试过了:
my_command && (echo 'my_command failed; exit)
Run Code Online (Sandbox Code Playgroud)
但它不起作用.它不断执行脚本中此行之后的指令.我正在使用Ubuntu和bash.
我在UNIX中编写脚本,我必须检查字符串中的第一个字符是否为"/",如果是,则为branch.
例如,我有一个字符串:
/some/directory/file
Run Code Online (Sandbox Code Playgroud)
我希望这返回1,并且:
server@10.200.200.20:/some/directory/file
Run Code Online (Sandbox Code Playgroud)
返回0.
如果有人问过这个道歉,但在Docker文档中没有任何地方可以找到退出代码的权威列表(也称为退出状态).奇怪!我看到有关使其保持一致的建议,但在docker.com上没有文档.
有谁知道可以找到退出代码的位置?
linux命令返回的退出状态1的含义是什么?像127退出状态表示"未找到命令".
我访问过http://linux.die.net/abs-guide/exitcodes.html页面,是否意味着退出状态1没有特别的含义?
我将通过编写一个简单的fabfile 来安装check_mk插件:
from fabric.api import env, run, roles, execute, parallel
env.roledefs = {
'monitoring': ['192.168.3.118'],
'mk-agent': ['192.168.3.230', '192.168.3.231', '192.168.3.232']
}
@roles('monitoring')
def mk():
run('[ -f check_mk-1.1.12p7.tar.gz ] || wget http://mathias-kettner.de/download/check_mk-1.1.12p7.tar.gz')
run('[ -d check_mk-1.1.12p7 ] || tar zxvf check_mk-1.1.12p7.tar.gz')
run('cd check_mk-1.1.12p7 && sudo ./setup.sh')
@parallel
@roles('mk-agent')
def mk_agent():
run('[ `rpm -qa | grep -c xinetd` -eq 0 ] && sudo yum -y install xinetd.x86_64')
run('sudo rpm -ivh http://mathias-kettner.de/download/check_mk-agent-1.2.0b2-1.noarch.rpm')
def check_mk():
execute(mk)
execute(mk_agent)
Run Code Online (Sandbox Code Playgroud)
但是,正如您可以猜到的,如果xinetd
已经安装了软件包,Fabric将停止并出现以下错误:
Fatal error: run() received …
Run Code Online (Sandbox Code Playgroud) 我想知道bash脚本中的任何命令是否以非零状态退出.
我想要类似于set -e
功能的东西,除了当命令以非零状态退出时我不希望它退出.我想让它运行整个脚本,然后我想知道:
a)所有命令以退出状态0退出
-
或- b)一个或多个命令以非零状态退出
例如,给出以下内容:
#!/bin/bash
command1 # exits with status 1
command2 # exits with status 0
command3 # exits with status 0
Run Code Online (Sandbox Code Playgroud)
我想要运行所有三个命令.运行脚本后,我想要一个指示,即至少有一个命令以非零状态退出.
我注意到bash 表示法的返回状态明显不一致(( ))
.
考虑以下
$> A=0
$> ((A=A+1))
$> echo $? $A
0 1
Run Code Online (Sandbox Code Playgroud)
但是使用其他众所周知的速记增量表示法产生:
$> A=0
$> ((A++))
$> echo $? $A
1 1
Run Code Online (Sandbox Code Playgroud)
如果set -e
脚本中有内置的第二个表示法将导致脚本退出,因为((A++))
返回的非零的退出状态.在这个相关问题中或多或少地解决了这个问题.但它似乎并没有解释这两个符号在退出状态的差异((A=A+1))
和((A++))
((A++))
似乎1
只有在A
等于时返回0
.(免责声明:我没有做过详尽的测试.在bash 4.1.2和4.2.25中测试过).所以最后一个问题归结为:
为什么要A=0; ((A++))
回来1
?
当我尝试运行npm install时出现以下错误.错误如下:
npm ERR! node v0.12.12
npm ERR! npm v3.3.6
npm ERR! code ELIFECYCLE
npm ERR! angular2-quickstart@1.0.0 postinstall: `typings install`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the angular2-quickstart@1.0.0 postinstall script 'typings ins
tall'.
npm ERR! This is most likely a problem with the angular2-quickstart package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! typings install
npm ERR! You can get their info via:
npm …
Run Code Online (Sandbox Code Playgroud)假设我在unix shell中执行此操作
$ some-script.sh | grep mytext
$ echo $?
Run Code Online (Sandbox Code Playgroud)
这将给我退出代码 grep
但是如何获得退出代码呢? some-script.sh
编辑
假设管道操作是不可变的.也就是说,我无法分开它并单独运行这两个命令
我在我的linux机器上使用Maven v2.2.1.我有一个构建脚本,它调用mvn并根据构建状态执行某些操作.我注意到退出状态代码设置为0,无论mvn构建是失败还是成功.
我也碰到http://jira.codehaus.org/browse/MNG-3651声称该问题已经在V2.1.0-M1.有没有其他人注意到这一点?
谢谢!