一个bash文件中有多个shebang


8

我有一个别人看过的脚本(注意:这是一个文件):

#!/bin/bash

some commands
some commands

#!/bin/bash

some commands
some commands

#!/bin/bash

some commands
some commands

我想知道第二和第三次爆炸的目的是什么?是由于错误还是故意?


是外来#!/bin/bash的preceeded <<的结构(这里的文件): some command <<end_of_script_flag

没有任何<<构造。只是普通的shebang和一些删除命令(这是卸载脚本)
Barat Sahdzijeu 2015年

可能是脚本是由要连续运行的脚本组装而成的,也可能是文件打算拆分为几个独立的脚本,但拆分失败。多余的#!行之前是什么?
吉尔(Gilles)'所以

@Gilles,我相信该脚本没有任何其他隐藏的用途。这是一个名为Uninstall.command(平台:Mac OS X)的静态脚本。
Barat Sahdzijeu

Answers:


9

如果这些行不是要构建的包含的shell脚本的开始,即在以下形式的方案中:

cat <<end_of_shell_script >dynamically_built_shell
#!/bin/bash
[...]
end_of_shell_script

然后,你发现了重复的结构是很多人的结果copy- paste全shell脚本,但没有足够的照顾和什么是对脚本的第1行中使用这些非常特殊的评论的理解,开始#!

使用这样的shell脚本之前要小心(no sudo,no su:))。


BTW,大量使用sudo的存在... ... Jeezzz
巴拉Sahdzijeu

/bin/rm(+假东西喂机器人)!
2013年

3
...或组合多个bash脚本,类似于source按名称-d它们执行该脚本的方式。不过,我认为没有必要发表评论。这样完全可以接受,这就是shebang是注释行的原因。
0xC0000022L15年

再看一遍后,我注意到其他几行重复出现,所以我倾向于认为这只是从多个脚本中粗心地复制粘贴。
Barat Sahdzijeu 2015年

4

没有目的,这些只是评论。除非“某些命令”包含一些将其保存到单独文件中以供以后执行的命令。


没有任何写入操作和后续执行。该脚本只是一组rm操作,可以卸载某些应用程序。我认为这可能与派生新shell有关,但显然它是脚本创建者的肮脏复制粘贴。
Barat Sahdzijeu 2015年

@BaratSahdzijeu小心RM里面的随机脚本!对于上限,我们深表歉意,但我不能强调这一点的重要性。如果原始作者犯了正确的错误(或者错误的错误),则可能会损坏计算机上的其他软件,甚至破坏操作系统。
Nzall 2015年

内特,谢谢!实际上,我没有运行该Shell脚本。我将其用作Mac OS X(Linux之类的OS)平台上的卸载程序的学习资源。以为它可能具有某种特殊的bash风格,而在剧本中反复重复就意味着一些意义。
Barat Sahdzijeu 2015年

#!在在内核级别(见同用man execve)任何Unix系统(OpenBSD的,FreeBSD的,MacOS X系统,卡利Linux的...)。该bash不会简单地认为这是一个注释。

@NateKerkhofs以及mv ln cp dd vi ...其他200个命令是什么?你为什么不给他们压力呢?他们可能会感到被排斥在外。
ott-- 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.