ubuntu 10.06 shell 对++运算错误的问题
-
- 帖子: 14
- 注册时间: 2011-11-03 17:43
Re: ubuntu 10.06 shell 对++运算错误的问题
用source执行也不行
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: ubuntu 10.06 shell 对++运算错误的问题
# 那么不是受限原因了。lsq0252 写了:用source执行也不行
#注意到run_command_progress_float函数已经成功执行了一次,肯定与++无关。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,后,就可以继续运行下去
用bash -x执行看看停下之前有何异常,没有你的那些文件,我无法重现问题,应该不难发现原因的。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
- 帖子: 14
- 注册时间: 2011-11-03 17:43
Re: ubuntu 10.06 shell 对++运算错误的问题
我用 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='[ ]---------'
但是最后确实是在执行完++后退出的,我茫然了,我吧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 次
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: ubuntu 10.06 shell 对++运算错误的问题
#循环非正常崩溃,有没有在别的电脑试过?(所有电脑上都能重现问题应该是灵异现象了)
或者不用循环:
prog_bar_base='[ ]'$(seq $RCP_RANGE|tr '\n' '-'|tr -dc '-')'|'
或者不用循环:
prog_bar_base='[ ]'$(seq $RCP_RANGE|tr '\n' '-'|tr -dc '-')'|'
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: ubuntu 10.06 shell 对++运算错误的问题
#进度条的话自己喜欢这样处理:
#!/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
#!/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++强悍,不过可以用。
-
- 帖子: 14
- 注册时间: 2011-11-03 17:43
Re: ubuntu 10.06 shell 对++运算错误的问题
确实是这个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循环从语法上看是没有问题的,为什么会崩掉呢?
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循环从语法上看是没有问题的,为什么会崩掉呢?
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: ubuntu 10.06 shell 对++运算错误的问题
#任何电脑上都能重复现象的话,可能是个诡异的bug,不然就是你的电脑硬件性能不稳,比如内存,所以有不用组装机做服务器的说法是有道理的吧。
#自己三台电脑中,有一台就是硬件性能不稳,表现是阅览器容易崩溃,不管firefox还是chromium,禁用flash也是一样,有时会莫名重出现登录画面,另两台完全不会。(扫描过内存是发现不了问题)
#自己三台电脑中,有一台就是硬件性能不稳,表现是阅览器容易崩溃,不管firefox还是chromium,禁用flash也是一样,有时会莫名重出现登录画面,另两台完全不会。(扫描过内存是发现不了问题)
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
- 帖子: 14
- 注册时间: 2011-11-03 17:43
Re: ubuntu 10.06 shell 对++运算错误的问题
我只有2台主机,一台装的是redhat,一台就是ubuntu了,所以没有别的ubuntu机器去测试。
但是这台ubuntu的机器运行其他应用程序都挺稳定的。看来这个问题只能 这样了。
多谢大家的支持,尤其感谢fnan的帮助。谢谢!
但是这台ubuntu的机器运行其他应用程序都挺稳定的。看来这个问题只能 这样了。
多谢大家的支持,尤其感谢fnan的帮助。谢谢!
-
- 帖子: 5
- 注册时间: 2011-12-25 15:06
Re: ubuntu 10.06 shell 对++运算错误的问题
我也在安装海思的sdk时候出现问题了,你说的那个++我也遇到了,我找上面的修改了,然后就好了,但是现在又出来一个问题了,lsq0252 写了:ubuntu 10.06 shell 不支持++运算吗?为什么我的脚本写的++运算都无法正确执行,改成+1 就 ok了?
难道shell有bug还是我ubuntu哪儿设置不对?
有人知道吗?
解压缩的时候有一个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文件变为原来一样的,没有修改的样子了