这个进度条怎么出不来。。【已解决】完整可用代码看10楼

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
ghostry
帖子: 1532
注册时间: 2008-07-23 20:08
来自: http://www.ghostry.cn
联系:

这个进度条怎么出不来。。【已解决】完整可用代码看10楼

#1

帖子 ghostry » 2010-07-26 18:05

代码: 全选

#! /bin/bash
##从/dev/cdrom创建iso
isoName=`zenity --entry --text="请你输入新建iso的文件名 (文件名.iso):"`
#echo $iisoname
#dd if=/dev/cdrom of=$isoName | zenity --progress --text="请等待, 正在读取CD ..."
zenity --info --text="此进度条无效,如确定按钮可用则表示进程已结束。中途无法取消。"
#dd if=/dev/cdrom of=$isoName
#dd if=/dev/cdrom of=$isoName& while [ -e /proc/$! ];do echo -n '.';sleep 1;done
i=0
dd if=/dev/cdrom of=$isoName& while [ -e /proc/$! ];do echo -n $i;i=$i+1;sleep 1;done|zenity --progress --text="请等待, 正在读取CD ..."
上次由 ghostry 在 2010-07-27 13:40,总共编辑 1 次。
http://www.ghostry.cn狂网技术工作室,组网建站,平面设计,java项目,空间域名.
好心人点这里进去注册并且用一次,给我增加点流量http://tinyurl.com/272ncjl
电脑配置:
公司:880G/II250/1TB/2G1333/
家:785G+/II245+/1TB/2G677/
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

Re: 这个进度条怎么出不来。。

#2

帖子 fanhe » 2010-07-27 0:02

zenity的进度条我也搞不懂
API过于简陋,不好搞
我建议还是用虚拟终端的脚本好一点,信息也全
要不就用python的gtk或者qt来得实际点
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

Re: 这个进度条怎么出不来。。

#3

帖子 aerofox » 2010-07-27 6:33

看看楼主能不能将脚本改成这个样子:

代码: 全选

#!/bin/bash
##从/dev/cdrom创建iso
isoName=`zenity --entry --text="请你输入新建iso的文件名 (文件名.iso):"`

dd if=/dev/cdrom of=$isoName& 
while [ -e /proc/$! ]; do
    percentage=$(( ))  # (( )) 中填上计算百分比的表达式
    printf "#请等待, 正在读取CD .... %d%%\n" $percentage
    echo $percentage
sleep 1;
done | zenity --progress --text="请等待, 正在读取CD ..."
头像
ghostry
帖子: 1532
注册时间: 2008-07-23 20:08
来自: http://www.ghostry.cn
联系:

Re: 这个进度条怎么出不来。。

#4

帖子 ghostry » 2010-07-27 9:09

看起来是可行的,不过计算百分比需要知道已复制的量和总量。获得文件大小可以用
stat -c %s filename
获得光盘容量的命令我可就不知道了。。
http://www.ghostry.cn狂网技术工作室,组网建站,平面设计,java项目,空间域名.
好心人点这里进去注册并且用一次,给我增加点流量http://tinyurl.com/272ncjl
电脑配置:
公司:880G/II250/1TB/2G1333/
家:785G+/II245+/1TB/2G677/
头像
ghostry
帖子: 1532
注册时间: 2008-07-23 20:08
来自: http://www.ghostry.cn
联系:

Re: 这个进度条怎么出不来。。

#5

帖子 ghostry » 2010-07-27 9:27

代码: 全选

$ df /dev/sr0 
文件系统           1K-块      已用      可用 已用% 挂载点
/dev/sr0                466516    466516         0 100% /media/MFL_PRO
找到了这个命令,但是不知道怎么吧466516这数值单独分离出来
http://www.ghostry.cn狂网技术工作室,组网建站,平面设计,java项目,空间域名.
好心人点这里进去注册并且用一次,给我增加点流量http://tinyurl.com/272ncjl
电脑配置:
公司:880G/II250/1TB/2G1333/
家:785G+/II245+/1TB/2G677/
头像
ghostry
帖子: 1532
注册时间: 2008-07-23 20:08
来自: http://www.ghostry.cn
联系:

Re: 这个进度条怎么出不来。。

#6

帖子 ghostry » 2010-07-27 10:33

代码: 全选

#! /bin/bash
##从/dev/cdrom创建iso
cdsize=`df /dev/sr0`
isoname=`echo $cdsize|awk -F"[  ]" '{print $12}'|awk -F"[/]" '{print $3}'`
#isoname=`echo $isoname.iso|awk '{ gsub(/ /, "_"); print }'` #取得默认文件名
isoname=`echo $isoname.iso`
cdsize=`echo $cdsize|awk -F"[ ]" '{print $9}'` #获取光盘总大小单位kb
#echo $cdsize
isoName=`zenity --entry --text="请你输入新建iso的文件名 (文件名.iso):" --entry-text=$isoname`
if [ ! $isoName = "" ];then
dd if=/dev/cdrom of=$isoName&
while [ -e /proc/$! ]; do 
	filesize=`stat -c %s $isoName`  
	let   percentage=$filesize/$cdsize*100/1024 
    	printf "#请等待, 正在读取CD .... %d%%\n" $percentage 
        echo $percentage
        sleep 1;
done | zenity --progress --text="请等待, 正在读取CD ..."
fi
目前就是不能点击取消的时候把dd的进程结束掉。。
http://www.ghostry.cn狂网技术工作室,组网建站,平面设计,java项目,空间域名.
好心人点这里进去注册并且用一次,给我增加点流量http://tinyurl.com/272ncjl
电脑配置:
公司:880G/II250/1TB/2G1333/
家:785G+/II245+/1TB/2G677/
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

Re: 这个进度条怎么出不来。。

#7

帖子 aerofox » 2010-07-27 12:13

在 dd 命令后将进程号保存到 dd_pid 中,然后在 zenity 命令后加 || kill $dd_pid,应该可以用实现楼上要的功能。
头像
ghostry
帖子: 1532
注册时间: 2008-07-23 20:08
来自: http://www.ghostry.cn
联系:

Re: 这个进度条怎么出不来。。

#8

帖子 ghostry » 2010-07-27 12:55

代码: 全选

#! /bin/bash
##从/dev/cdrom创建iso
cdsize=`df /dev/sr0`
isoname=`echo $cdsize|awk -F"[  ]" '{print $12}'|awk -F"[/]" '{print $3}'`
#isoname=`echo $isoname.iso|awk '{ gsub(/ /, "_"); print }'` #取得默认文件名
isoname=`echo $isoname.iso`
cdsize=`echo $cdsize|awk -F"[ ]" '{print $9}'` #获取光盘总大小单位kb
#echo $cdsize
isoName=`zenity --entry --text="请你输入新建iso的文件名 (文件名.iso):" --entry-text=$isoname`
if [ ! $isoName = "" ];then
dd if=/dev/cdrom of=$isoName&
pid_id=$!
echo $pid_id
while [ -e /proc/$! ]; do 
	filesize=`stat -c %s $isoName`  
	let   percentage=$filesize/$cdsize*100/1024 
    	printf "#请等待, 正在读取CD .... %d%%\n" $percentage 
        echo $percentage
        sleep 1;
done | zenity --progress --text="请等待, 正在读取CD ..." ;kill $pid_id
fi
感谢楼上,取消的功能也实现了,目前还有个bug,就是如果光盘卷标带有空格的话,就只能取得前边的一段字符。
http://www.ghostry.cn狂网技术工作室,组网建站,平面设计,java项目,空间域名.
好心人点这里进去注册并且用一次,给我增加点流量http://tinyurl.com/272ncjl
电脑配置:
公司:880G/II250/1TB/2G1333/
家:785G+/II245+/1TB/2G677/
头像
ghostry
帖子: 1532
注册时间: 2008-07-23 20:08
来自: http://www.ghostry.cn
联系:

Re: 这个进度条怎么出不来。。

#9

帖子 ghostry » 2010-07-27 13:39

代码: 全选

#! /bin/bash
##从/dev/cdrom创建iso
zenity --info --text="请选择您要保存文件的目录(默认为主目录)"
dirName=`zenity --file-selection --directory 2>/dev/null`
if [ $dirName = "" ];then
cd ~/
else
cd $dirName
fi
filesize=0
cdsize=`df /dev/sr0`
isoname=`echo $cdsize|awk -F"[/]" '{print $5}'`
isoname=`echo $isoname.iso|awk '{ gsub(/ /, "_"); print }'` #取得默认文件名
#isoname=`echo $isoname.iso`
cdsize=`echo $cdsize|awk -F"[ ]" '{print $9}'` #获取光盘总大小单位kb
#echo $cdsize
isoName=`zenity --entry --text="请你输入新建iso的文件名 (文件名.iso):" --entry-text=$isoname`
if [ ! $isoName = "" ];then
dd if=/dev/cdrom of=$isoName&
pid_id=$!
#echo $pid_id
while [ -e /proc/$! ]; do 
	filesize=`stat -c %s $isoName`  
	let   percentage=$filesize/$cdsize*100/1024 
    	printf "#请等待, 正在读取CD .... %d%%\n" $percentage 
        echo $percentage
        sleep 1;
done | zenity --progress --text="请等待, 正在读取CD ..." ;kill $pid_id
fi
完全解决啦
http://www.ghostry.cn狂网技术工作室,组网建站,平面设计,java项目,空间域名.
好心人点这里进去注册并且用一次,给我增加点流量http://tinyurl.com/272ncjl
电脑配置:
公司:880G/II250/1TB/2G1333/
家:785G+/II245+/1TB/2G677/
回复