快乐由心
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: