快乐由心

Shell脚本cd问题

上一篇 / 下一篇  2011-05-15 09:29:41 / 个人分类:所遇所得

软件测试过程中,我们可以通过脚本来提高测试的速度,可是有时会发现运行脚本的一些小问题。

最近,用Ubuntu运行脚本时发现无法cd到指定的目录,如:1.sh

#!/bin/sh

cd /home

./1.sh运行之后,pwd发现还是在原目录下,并未切换至home目录。该脚本这么简单,不会是脚本问题,那时什么原因呢?我在网上查找,有人说,Ubuntu默认的是dash脚本而非bash脚本,dash的速度较快但是有些在bash上可以运行的脚本在dash上就不行。可以用ls /bin/sh -al ,来查看一下指向的哪种类型,如果是指向dash,我们可以把它换成bash,sudo dpkg-reconfigure dash
出现菜单问你是否要dash的时候,选no就可以了。

我改了之后问题又来了,还是无法cd,我就无语了。然后又在脚本里加入了一句pwd查看路径,然后运行结果是进入了/home,可是运行结束再pwd就不行了,当时我就纠结了,实际上脚本是正确执行了的,但是我们看到的结果是不对的。后来看了Shell脚本十三问,才明白其中道理。原来在我们执行脚本时,会自动运行一个子脚本去完成里面的指令,然后回到父脚本,所有当我们在脚本执行结束后去pwd,是不行的。那如何让名命令在当前脚本执行呢?可以用source ./1.sh或者../1.sh,这样就可以了。

有时一个问题真的可以困扰我们好久,大家交流一下会比较容易解决,分享一下我的问题,呵呵。

再补充一下,还是脚本问题。我直接从word里面复制脚本虚拟机里面,是循环的,for do的那种,可是执行的时候总会出现,syntax error: word unexpected (expecting "do")
,我就奇怪了,确定我的代码没有错。后来在高手的帮助下,解决了。原来是换行的问题,我们眼睛看到的和机子上自己编译的是不同的,C语言用大是ASC码,换行时/n就ok了,可是linux里面unicore不是的,是/r/n,在我们表面看来没有任何不同,可是运行起来就是错的。所以大家以后注意了,写脚本要在虚拟机里直接写,不要复制哦,呵呵。两天的问题都解决了,好诶!


TAG:

 

评分:0

我来说两句

Open Toolbar