我有一个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
我做错了什么?
答案 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
是否为空(表示该命令有输出)。