有没有什么Bash
家当客观上比其他大多数应用更好?
#!/usr/bin/env bash
#!/bin/bash
#!/bin/sh
#!/bin/sh -
我很清楚地回忆起很久以前的一次听说,在最后添加一个破折号可以防止有人将命令传递给你的脚本,但却无法找到任何细节.
l0b*_*0b0 1425
您应该使用#!/usr/bin/env bash
的便携性:不同的*nixes放在bash
不同的地方,并使用/usr/bin/env
是运行第一种解决方法bash
上找到PATH
.而sh
不是bash
.
del*_*ver 78
/bin/sh
通常是系统默认shell的链接,这通常是bash
打开的,例如,Debian系统的重量较轻dash
.无论哪种方式,最初的Bourne shell都是sh
,所以如果你的脚本使用了一些bash
(第2代,"Bourne Again sh")特定的功能([[ ]]
测试,数组,各种含糖的东西等),那么你应该更具体并使用更晚的.这样,在未安装bash的系统上,您的脚本将无法运行.我知道可能有一部关于这种演变的令人兴奋的电影三部曲...但这可能是传闻.
还要注意,当被唤起时sh
,bash
在某种程度上表现为POSIX标准 sh
(另请参阅关于此的GNU文档).
小智 22
使用shebang行来调用适当的解释器不仅仅适用于BASH.您可以将shebang用于系统上的任何解释语言,例如Perl,Python,PHP(CLI)和许多其他语言.顺便说一句,shebang
#!/bin/sh -
Run Code Online (Sandbox Code Playgroud)
(它也可以是两个破折号,即--
)结束bash选项后将被视为文件名和参数.
使用该env
命令可使您的脚本可移植,并允许您为脚本设置自定义环境,因此可移植脚本应使用
#!/usr/bin/env bash
Run Code Online (Sandbox Code Playgroud)
或者对于Perl这样的语言
#!/usr/bin/env perl
Run Code Online (Sandbox Code Playgroud)
请务必查看以下man
页面bash
:
man bash
Run Code Online (Sandbox Code Playgroud)
并且env
:
man env
Run Code Online (Sandbox Code Playgroud)
注意:在Debian和基于Debian的系统上,如Ubuntu,sh
与之dash
无关bash
.所有系统脚本都使用sh
.根据Debian的说法,这可以让bash成长并使系统保持稳定.
另外,保持调用*nix就像我从不在shebang调用的脚本上使用文件扩展名一样,因为你不能像在Windows上那样省略可执行文件调用的扩展名.file命令可以将其标识为脚本.
Kei*_*son 22
我建议使用:
#!/bin/bash
Run Code Online (Sandbox Code Playgroud)
它不是100%可移植的(一些系统bash
位于除了之外的位置/bin
),但是许多现有脚本使用#!/bin/bash
压力使各种操作系统/bin/bash
至少对主要位置进行符号链接这一事实.
替代方案:
#!/usr/bin/env bash
Run Code Online (Sandbox Code Playgroud)
有人建议 - 但不能保证env
命令在/usr/bin
(并且我使用的系统不是).此外,此表单将使用bash
当前用户的第一个实例$PATH
,这可能不是bash shell的合适版本.
如果您需要在没有的系统上运行脚本/bin/bash
,可以修改脚本以指向正确的位置(这无疑是不方便的).
归档时间: |
|
查看次数: |
423283 次 |
最近记录: |