免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1346 | 回复: 4
打印 上一主题 下一主题

请教一个菜菜的问题,请大家赐教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-11-18 15:45 |只看该作者 |倒序浏览
请问很多脚本,第一行都写的是#!/bin/sh
为什么要这样写呢,不写可以吗?表示什么意思呢?那个!,还有/bin/sh

谢谢

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-24 06:20:00
2 [报告]
发表于 2003-11-18 15:51 |只看该作者

请教一个菜菜的问题,请大家赐教

#本来表示注释,但与"!"同时出现在第一行的时候,后面表示调用该脚本的程序的路径,/bin/sh一般是bourne shell..

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2003-11-18 15:55 |只看该作者

请教一个菜菜的问题,请大家赐教

那是指定 script 的 command interpreter 。

要不指定當然可以,

1) 你可用 shell 去跑:
$ bash my.script
$ sh my.script
$ csh my.script
$ ksh my.script
...

2) 或用 source 去跑:
$ source my.script
$ . my.script

3) 若 script 已有 execute 權限,直接跑也行:
./myscript

查別在於:
1) 會按你指定的 shell 去解釋 script 的每一行 command line
2) 在當前 shell 內跑 script (不是在子shell)
3) 起一個子shell 跑 script

在 2 跟 3 的情況下,最大的問題在於:
* 你得確定 script 用的 shell 語法跟你當前的 shell 要一致﹗
若,你沒辦法確定一至的話,(比方說 usera 用 csh,userb 用 bash...)
那要如何解決呢?  

嗯...,答案正是你問的問題本身啦~~~  ^_^

论坛徽章:
0
4 [报告]
发表于 2003-11-18 15:55 |只看该作者

请教一个菜菜的问题,请大家赐教

呵呵,多谢了

论坛徽章:
0
5 [报告]
发表于 2003-11-18 16:03 |只看该作者

请教一个菜菜的问题,请大家赐教

我补充一句

#!/path/to/your/interpreter

可以是任何解释器
常用的可以是 bash, awk, sed, python, perl 等等。
也可以是你自己编的程序。
Unix 在执行带有执行权限的文件的时候,检查他的文件头,如果是
ELF a.out 等格式的可执行二进制文件,那么就直接执行,
如果开头两个字节是 #! ,
那么就会像运行下面的命令一样
/path/to/your/interpreter  yourfilename
这里假设你的文件名称是 yourfilename

这样就会明白为什么 awk 的脚本程序的第一行是
#!/bin/awk -f
-f 参数表示运行的脚本。

如果我们有记错的话,这种机制的术语叫做 Sha-Bang
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP