ubuntu 10.06 shell 对++运算错误的问题

sh/bash/dash/ksh/zsh等Shell脚本
lsq0252
帖子: 14
注册时间: 2011-11-03 17:43

Re: ubuntu 10.06 shell 对++运算错误的问题

#31

帖子 lsq0252 » 2011-11-15 11:23

用source执行也不行
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: ubuntu 10.06 shell 对++运算错误的问题

#32

帖子 fnan » 2011-11-15 22:06

lsq0252 写了:用source执行也不行
# 那么不是受限原因了。
unpacking source/lib/ncurses-5.5
run_command_progress_float: 'tar -xvzf pub/tarball/ncurses-5.5.tgz -C source/lib/'
[100%]##################################################|
unpacking source/lib/expat-1.95.8
run_command_progress_float: 'tar -xvzf pub/tarball/expat-1.95.8.tgz -C source/lib/'
Initializing progress bar ...
执行到这里就停了,
但是把comman.sh里的 ++ 改为 += 1,后,就可以继续运行下去
#注意到run_command_progress_float函数已经成功执行了一次,肯定与++无关。
用bash -x执行看看停下之前有何异常,没有你的那些文件,我无法重现问题,应该不难发现原因的。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
lsq0252
帖子: 14
注册时间: 2011-11-03 17:43

Re: ubuntu 10.06 shell 对++运算错误的问题

#33

帖子 lsq0252 » 2011-11-17 10:15

我用 bash -x 执行了程序,从打印的结果来看好像问题不是处在++上,之前执行的++也都成功,
但是最后确实是在执行完++后退出的,我茫然了,我吧ubuntu上 执行的结果上传到附件中,请帮忙分析一下。
下面的结果是在redhat上执行的,我把对应的部分贴到下边,以做对比:

+ ECHO 'unpacking source/lib/expat-1.95.8'
+ '[' -n '' ']'
+ echo 'unpacking source/lib/expat-1.95.8'
unpacking source/lib/expat-1.95.8
+ mkdir -pv source/lib
+ run_command_progress_float 'tar -xvzf pub/tarball/expat-1.95.8.tgz -C source/lib/' 0 'tar -tzf pub/tarball/expat-1.95.8.tgz | wc -l'
+ local readonly RCP_RANGE=50
+ local rcp_lines=0
+ local rcp_nextpos=1
+ local rcp_total=0
+ local progress_bar=
+ local rcp_prog=0
+ local rcp_tmp=0
+ local prog_bar_base=
+ local rcp_percent=0
+ ECHO 'run_command_progress_float: '\''tar -xvzf pub/tarball/expat-1.95.8.tgz -C source/lib/'\'''
+ '[' -n '' ']'
+ echo 'run_command_progress_float: '\''tar -xvzf pub/tarball/expat-1.95.8.tgz -C source/lib/'\'''
run_command_progress_float: 'tar -xvzf pub/tarball/expat-1.95.8.tgz -C source/lib/'
+ '[' -n 'tar -tzf pub/tarball/expat-1.95.8.tgz | wc -l' ']'
+ echo -n 'Initializing progress bar ...'
Initializing progress bar ...++ eval tar -tzf pub/tarball/expat-1.95.8.tgz '|' wc -l
+++ tar -tzf pub/tarball/expat-1.95.8.tgz
+++ wc -l
+ rcp_total=144
+ echo -n '\r'
\r+ '[' -z 144 ']'
+ '[' -z 144 ']'
+ '[' 144 -le 0 ']'
+ prog_bar_base='[ ]'
+ '[' 0 -lt 50 ']'
+ prog_bar_base='[ ]-'
+ (( rcp_tmp++ ))
+ '[' 1 -lt 50 ']'
+ prog_bar_base='[ ]--'
+ (( rcp_tmp++ ))
+ '[' 2 -lt 50 ']'
+ prog_bar_base='[ ]---'
+ (( rcp_tmp++ ))
+ '[' 3 -lt 50 ']'
+ prog_bar_base='[ ]----'
+ (( rcp_tmp++ ))
+ '[' 4 -lt 50 ']'
+ prog_bar_base='[ ]-----'
+ (( rcp_tmp++ ))
+ '[' 5 -lt 50 ']'
+ prog_bar_base='[ ]------'
+ (( rcp_tmp++ ))
+ '[' 6 -lt 50 ']'
+ prog_bar_base='[ ]-------'
+ (( rcp_tmp++ ))
+ '[' 7 -lt 50 ']'
+ prog_bar_base='[ ]--------'
+ (( rcp_tmp++ ))
+ '[' 8 -lt 50 ']'
+ prog_bar_base='[ ]---------'
附件
1.txt
(465.25 KiB) 已下载 41 次
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: ubuntu 10.06 shell 对++运算错误的问题

#34

帖子 fnan » 2011-11-17 22:27

#循环非正常崩溃,有没有在别的电脑试过?(所有电脑上都能重现问题应该是灵异现象了)
或者不用循环:
prog_bar_base='[ ]'$(seq $RCP_RANGE|tr '\n' '-'|tr -dc '-')'|'
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: ubuntu 10.06 shell 对++运算错误的问题

#35

帖子 fnan » 2011-11-18 18:53

#进度条的话自己喜欢这样处理:
#!/bin/bash

function prog_bar
{
local readonly RCP_RANGE=50
local prog_b
local prog_p
local prog_tmp=

for n in $(seq $1)
do
prog_p=$((n*100/$1))
if [[ $prog_tmp != $prog_p ]]
then
prog_b=$(seq $((RCP_RANGE*(100-prog_p)/100))|tr '\n' '-'|tr -dc '-')
printf "[%%%d]%${RCP_RANGE}s|\r" $prog_p $prog_b|tr ' ' '#'
prog_tmp=$prog_p
fi
done
echo
}

prog_bar $1
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
lsq0252
帖子: 14
注册时间: 2011-11-03 17:43

Re: ubuntu 10.06 shell 对++运算错误的问题

#36

帖子 lsq0252 » 2011-11-21 10:27

确实是这个while循环的问题,
while [ $rcp_tmp -lt $RCP_RANGE ]
do
prog_bar_base="$prog_bar_base-"
((rcp_tmp ++))
done
prog_bar_base="${prog_bar_base}|"
printf "\r$prog_bar_base\r"

我现在把这个while循环去掉就ok了。但是这个while循环从语法上看是没有问题的,为什么会崩掉呢?
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: ubuntu 10.06 shell 对++运算错误的问题

#37

帖子 fnan » 2011-11-21 20:04

#任何电脑上都能重复现象的话,可能是个诡异的bug,不然就是你的电脑硬件性能不稳,比如内存,所以有不用组装机做服务器的说法是有道理的吧。
#自己三台电脑中,有一台就是硬件性能不稳,表现是阅览器容易崩溃,不管firefox还是chromium,禁用flash也是一样,有时会莫名重出现登录画面,另两台完全不会。(扫描过内存是发现不了问题)
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
lsq0252
帖子: 14
注册时间: 2011-11-03 17:43

Re: ubuntu 10.06 shell 对++运算错误的问题

#38

帖子 lsq0252 » 2011-11-22 9:51

我只有2台主机,一台装的是redhat,一台就是ubuntu了,所以没有别的ubuntu机器去测试。
但是这台ubuntu的机器运行其他应用程序都挺稳定的。看来这个问题只能 这样了。
多谢大家的支持,尤其感谢fnan的帮助。谢谢!
flywith
帖子: 5
注册时间: 2011-12-25 15:06

Re: ubuntu 10.06 shell 对++运算错误的问题

#39

帖子 flywith » 2012-03-16 11:33

lsq0252 写了:ubuntu 10.06 shell 不支持++运算吗?为什么我的脚本写的++运算都无法正确执行,改成+1 就 ok了?
难道shell有bug还是我ubuntu哪儿设置不对?
有人知道吗?
我也在安装海思的sdk时候出现问题了,你说的那个++我也遇到了,我找上面的修改了,然后就好了,但是现在又出来一个问题了,


解压缩的时候有一个makefile 1519行错误,如下
Makefile: 混合的隐含和普通规则 错误

/ %/: prepare scripts FORCE

$(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \

$(build)=$(build-dir)

修改后:

/: prepare scripts FORCE

$(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \

$(build)=$(build-dir)

%/: prepare scripts FORCE

$(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \

$(build)=$(build-dir)


网上这么说修改的。但是我还是不行的啊。


我执行了上面,发现每次运行完,回去看那个makefile文件变为原来一样的,没有修改的样子了
回复