Chinaunix首页 | 论坛 | 博客
  • 博客访问: 304875
  • 博文数量: 69
  • 博客积分: 1626
  • 博客等级: 上尉
  • 技术积分: 785
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-15 19:01
文章分类

全部博文(69)

文章存档

2015年(4)

2014年(4)

2013年(3)

2012年(6)

2011年(1)

2010年(16)

2009年(8)

2008年(18)

2007年(9)

我的朋友

分类: LINUX

2008-10-16 00:00:20

参考资料:
或http: //sopcast.references.tv/下载的sopcast linux版需要和mplayer组合使用,先通过sopcast连接到某个频道,并保存到本机上,再通过mplayer从本地观看(一共需要3句 SHELL指令即可)。下载的sp-auth中只要sp-sc-auth即可连接到频道:
#./sp-sc-auth sop://broker.sopcast.com:3912/6002 3908 8908 > /dev/null &
其中6602是频道号,频道号详见:
mplayer收看的SHELL语句如下:
#mplayer
切换频道语句如下:
#pkill sp-sc-auth

根据以上,看一次电视要输好长的命令,而且换台也不方便,就想是否可以写一个脚本来方便换台,
以下是自己写的一个简单的脚本:

#bash for sopcast
#功能说明:该script可以实现播放,换台,不换台暂停/继续
#缺陷:由于变量CHANNEL在该脚本关闭时后消失,所以在父shell
#关闭后,再开其它shell无法实现不换台暂停/继续功能
#by duoer 2008-10-22



case $1 in
     上海体育) channel="6001";;
     cctv5) channel="6002";;
     ESPN) channel="6003";;
     凤凰卫视) channel="6004";;
     凤凰资讯) channel="6005";;
     星空卫视) channel="6006";;
     翡翠台) channel="6008";;
     电影放映区) channel="6011";;
     国家地理) channel="6015";;
     星空国际电影) channel="6020";;
     东方电影) channel="6023";;
     好莱坞电影) channel="6025";;
     电影频道) channel="6028";;
     星空体育) channel="6029";;
     广东体育) channel="6543";;
     NBA) channel="6724";;
     东方卫视) channel="6401";;
     HDTV) channel="6880";;
     cctv1) channel="15102";;
     意大利娱乐) channel="28953";;
     NBATV) channel="39768";;
esac

VAR=`ps aux |grep sp-sc-auth |grep -v grep |tr ' ' '\n'|uniq |head -3 |sed -n '/
[0-9][0-9][0-9][0-9]/p'`
if [ -n "$VAR" ]&&[ "$channel" != "$CHANNEL" ]; then
kill $VAR
echo "kill the process,please wait for a moment"
sp-sc-auth sop://broker.sopcast.com:3912/`echo $channel` 8000 8888 > /dev/null &
 
sleep 5
mplayer

elif [ -n "$VAR" ]&&[ "$channel" = "$CHANNEL" ]; then
echo "repeat the previous channel....."
mplayer

else
echo "searching the channel ......."
sp-sc-auth sop://broker.sopcast.com:3912/`echo $channel` 8000 8888 > /dev/null &
 
sleep 5
mplayer
fi

export CHANNEL=`echo $channel`
#echo $CHANNEL


参考下面的帖子:
最近在学习BASH的export命令时碰到了一个难道(书上说export是将自定义变量变 成系统环境变量):我在一个脚本文件中定义一个了变量,然后export变量,按照我自己的想法,执行完这个脚本后,在提示符下一定可以用echo显示出 它的值,可结果却不是这样,脚本执行完后用set根本看不到有这个变量存在。为什么呢?我百思不得其解,最后将问题贴出来,一位前辈告诉我说用 source+脚本文件就可以了,我试了一下果然可以,但一个新的问题又出来了。我将脚本中export命令删除后,用source一样可以。那这个 export好像没有什么用呀。
    在经过多次尝试后发现了一些东西,是我自己猜的,如果有什么不对的地方,请指正,谢谢。
    执行一个脚本时,会先开启一个子shell环境(不知道执行其它程序是不是这样),然后将父shell中的所有系统环境变量复制过来,这 个脚本中的语句就在子shell中执行。(也就是说父shell的环境变量在子shell中可以调用,但反过来就不行,如果在子shell中定义了环境变 量,只对该shell或者它的子shell有效,当该子shell结束时,也可以理解为脚本执行完时,变量消失。)为了证明这一点,请看脚本内容:
test='value'
export test
这样的脚本执行完后,test实际上是不存在的。接着看下面的:
test='value'
export test
bash
这里在脚本最后一行再开一个子shell,该shell应该是脚本文件所在shell的子shell,这个脚本执行完后,是可以看到test这个变量的,因为现在是处于它的子shell中,当用exit退出子shell后,test变量消失。
    如果用source对脚本进行执行时,如果不加export,就不会在子shell中看到这个变量,因为它还不是一个系统环境变量呀,如脚本内容是:
test='value'
用source执行后,在shell下是能看到这个变量,但再执行bash开一个子shell时,test是不会被复制到子shell中的,因为 执行脚本文件其实也是在一个子shell中运行,所以我再建另一个脚本文件执行时,是不会输入任何东西的,内容如:echo $test。所以这点特别注 意了,明明在提示符下可以用echo $test输出变量值,为什么把它放进脚本文件就不行了呢?
    所以得出的结论是:1、执行脚本时是在一个子shell环境运行的,脚本执行完后该子shell自动退出;2、一个shell中的系统 环境变量才会被复制到子shell中(用export定义的变量);3、一个shell中的系统环境变量只对该shell或者它的子shell有效,该 shell结束时变量消失(并不能返回到父shell中)。3、不用export定义的变量只对该shell有效,对子shell也是无效的。
    后来根据版主的提示,整理了一下贴子:为什么一个脚本直接执行和用source执行不一行呢?这也是我自己碰到的一个问题。 manual原文是这样 的:Read and execute commands from filename in the current shell environment and return the exit status of the last command executed from filename. 明白了为什么不一样了吧?直接执行一个脚本文件是在一个子shell中运行的,而source则是在当前shell环境中运行的。根据前面的内容,你也已 经明白其中的道理了吧。
   



阅读(3335) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

duoerlee2008-10-16 00:02:19

截取下来的频道列表: Sport Channels 体育频道(All from Internet) 6001. SH-GSports 上海体育 364 .21 1712k 77/91 6002. CCTV5 364 .33 2967k 91/98 6003. ESPN Sports 364 .24 1859k 81/100 6029. Star Sports 364 .20 904k 89/98 6098. Telecapri Soccer.IT 109 .10 183k 87/93 6116. WMOE(VLC) 248 .13 143k 75/100 6473. R.tv Sport 03 - ChampsOpen#15 + Trailer07 224 .09 203k 63/95 6543. GD-Sports 广东体育 450 .19 1430k 92/99 7490. 3TV [Sports Channel1]競技體育