Bash,如何检查命令输出并继续

时间:2013-12-03 09:51:00

标签: linux bash

我有一个bash脚本,它将我的文件rsyncs到我的远程服务器。我想在同步之前检查是否有“import ipdb; ipdb.set_trace()”行,但我不能。这是我的剧本:

#!/bin/bash;
var="$1" ;

if [ "$var" == "main" -o "$var" == "all" ] ; then
    echo "*** checking of ipdb lines, first ***" ;
    res=$(ack-grep --type=python "import ipdb" -c -l) ; 
    if [ $res ] ; then
        echo $res ; 
    else
        rsync -Paz --exclude ".*" -e "ssh -i /home/chris/.ssh/thishost-rsync-key" this_pc remote_pc 
    fi
fi

我总是遇到这种错误:

*** checking of ipdb lines, first ***
sync.sh: line 10: [: too many arguments
sending incremental file list

我脚本中的第10行就是这一行:if [ $res ] ; then

我做错了什么?

2 个答案:

答案 0 :(得分:1)

而不是:

if [ $res ] ; then

使用:

if [ ! -z "$res" ] ; then
  • -z =>如果字符串的长度为零,则返回True。

答案 1 :(得分:1)

当你这样做时

res=$(ack-grep --type=python "import ipdb" -c -l) ; 

变量$res设置为包含$(...)内命令的输出

如果您希望生成的退出状态改为使用$?,请使用例如

if [ ! -z "$res" ] ...

检查$res是否为空(表示该命令有输出)。