当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 7 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 为何使用sh xx.sh和./xx.sh运行的结果不同呢?
帖子发表于 : 2011-01-13 9:35 

注册: 2010-11-27 22:20
帖子: 76
送出感谢: 0 次
接收感谢: 0 次
例如我要运行这个shell script

vi sh01.sh
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo -e "Hello World!\a\n"
exit 0

如果我使用shsh01.sh来运行,则会显示-e Hello World!
如果我使用./sh01.sh来运行,则显示正常:Hello World!

而且发现这不是特例,例如
vi sh06.sh
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
read -p "Please input (Y/N): " yn
[ "$yn" == "Y" -o "$yn" == "y" ] && echo "OK, continue" && exit 0
[ "$yn" == "N" -o "$yn" == "n" ] && echo "Oh, interrupt!" && exit 0
echo "I don't know what your choice is" && exit 0

使用./sh06.sh非常正常,
但是使用sh sh06.sh就会显示:
Please input (Y/N):y
[:10:y:unexpected operator
[:11:y:unexpected operator
I don't know what your choice is

以上如果都用source运行,显示都正常,不过都会因为script里面的exit 0而导致整个shell的退出

我知道使用source是在父shell运行script的,而是用路径或者sh是在子shell运行的,是不是因为这种原因导致了三种运行方式都有不同的结果?
大侠能否具体的说明?谢谢


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 为何使用sh xx.sh和./xx.sh运行的结果不同呢?
帖子发表于 : 2011-01-13 9:56 
头像

注册: 2010-08-08 20:02
帖子: 741
系统: Ubuntu 12.04
送出感谢: 0 次
接收感谢: 1
sh bash不同
第一行为 #!/bin/bash 故 ./shellname 用的是bash
而 sh shellname 用的是sh
好像默认的sh是指向dash的,而dash和bash之间有很大差别
你可以用 bash shellname 来运行它
如果第一行是 #!/bin/sh 则 ./shellname 和 sh shellname 的运行结果一致
shell有很多种,例如bash, csh, ksh ,zsh 等,每种shell的语法各有差异
第一行的 #!/bin/bash 表明它是用bash写的,也要用bash来运行


_________________
退避九舍:富贵不能淫,贫贱不能移,威武不能屈:坚持ubuntu不动摇!


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 为何使用sh xx.sh和./xx.sh运行的结果不同呢?
帖子发表于 : 2011-01-13 10:24 

注册: 2010-11-27 22:20
帖子: 76
送出感谢: 0 次
接收感谢: 0 次
非常感谢,醍醐灌顶啊!


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 为何使用sh xx.sh和./xx.sh运行的结果不同呢?
帖子发表于 : 2011-01-13 10:25 
头像

注册: 2008-12-20 15:43
帖子: 9349
地址: 心靈深處
系统: 家14.04,公司14.04
送出感谢: 13
接收感谢: 37
:em11 ...學習了...


_________________
[论坛版主行为规定]+[PITIVI簡易教程]+[CAD裝draftsight]+[酷我音乐裝kwplayer]+[ubuntu裝迅雷]
[releases.ubuntu.com]+[cdimage.ubuntu.com]+[old-releases.ubuntu.com]
[學ubuntu必須拜讀懶蝸牛"笨兔兔的故事"=viewtopic.php?f=112&t=162040][Linux明日的希望在中國]


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 为何使用sh xx.sh和./xx.sh运行的结果不同呢?
帖子发表于 : 2011-01-13 10:33 
头像

注册: 2009-01-06 15:18
帖子: 13005
地址: 人间
送出感谢: 1
接收感谢: 24
shell多了也是问题。
了解下。


_________________
“有一种被人抛诸脑后的过去,包含一些不该遗忘的点点滴滴。欢笑之余,我将故旧拾起,才刹见自己的薄情。人世间似乎存在着某种公平,每个人都曾被抛掷在他人的遗忘中;而今你所有哽咽难宣的话语,也正是你曾为人所期盼,却永远听不见的字句。” —赫曼 赫塞


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 为何使用sh xx.sh和./xx.sh运行的结果不同呢?
帖子发表于 : 2011-01-13 10:48 
头像

注册: 2009-10-16 11:13
帖子: 994
地址: 福安
送出感谢: 1
接收感谢: 3
受教了,还真不知道这两个的区别。有bash为什么还要dash?


_________________
Acer 4738ZG-P22G50Mnkk 笔记本电脑
我用Windows 7 来这里装13的


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 为何使用sh xx.sh和./xx.sh运行的结果不同呢?
帖子发表于 : 2011-01-13 16:45 
头像

注册: 2008-09-18 13:11
帖子: 2770
送出感谢: 1
接收感谢: 449
jmw778s 写道:
受教了,还真不知道这两个的区别。有bash为什么还要dash?


自己看dash的描述呗
引用:
Since it executes scripts faster than bash, and has fewer library
dependencies (making it more robust against software or hardware
failures), it is used as the default system shell on Debian systems.


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 7 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:Google [Bot] 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译