加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash脚本:以$开头!代替 #!并有神秘的行为.发生了什么?

发布时间:2020-12-16 01:21:17 所属栏目:安全 来源:网络整理
导读:我不小心用$开始了一个bash脚本!代替 #!并得到一些非常奇怪的行为.我想弄清楚发生了什么. 如果您尝试此脚本: $!/bin/bashecho Hello world! 你会得到以下行为: $chmod +x hello$./hello[nothing happens,get prompt back]$exitexitHello world!$ 所以看
我不小心用$开始了一个bash脚本!代替 #!并得到一些非常奇怪的行为.我想弄清楚发生了什么.

如果您尝试此脚本:

$!/bin/bash
echo Hello world!

你会得到以下行为:

$chmod +x hello
$./hello
[nothing happens,get prompt back]
$exit
exit
Hello world!
$

所以看起来这样的事情发生了:

>产生了一个新的bash shell.
>退出时,执行脚本的其余部分.

这是怎么回事?怎么样都发生了?没有#!,shell如何知道使用bash来解释脚本?

显然这是“满足我的好奇心”,而不是“解决我的问题”问题.谷歌搜索不会产生太多,可能是因为#!和$!在查询中不会让谷歌机器人高兴.

$something是一个参数(“变量”)扩展,但是$!特别是返回一个未在脚本中设置的值,因此它将扩展为零长度字符串.

因此,您的脚本是正确的,相当于:

/bin/bash
echo Hello world!

shebang magic number是Unix的一个老功能,但外壳更老了.内核不能执行的执行位设置的文本文件(因为它实际上没有编译)由子shell执行.也就是说,shell故意运行另一个shell并将路径名作为参数传递.这就是在shebang发明之前执行shell脚本编写的命令,它仍然存在于代码中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读