参考资料:
或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) |