2015-10-28 88 views
2

我有用Bash编写的脚本列表,现在我需要将它们转换为Shell脚本。我知道bash是Shell规范的扩展实现,因此,我正在寻找在Bash中实现的扩展的一些规范,即Bash中不属于Shell规范的部分,所以我可以通过我的脚本并进行适当的修改。 有没有这样的文件? 另外,任何其他建议如何做转换将不胜感激。将Bash脚本转换为Shell

+3

[shellcheck](http://shellcheck.net)用'#!/ bin/sh' shebang应该会捕获许多bash-isms。这些脚本有多大?你究竟需要他们是多么便携? –

+0

“壳牌规格”是什么意思?有许多不同的shell是'bash'是一个。您是否在谈论与Bourne Shell('sh')的兼容性,具体是? – Phylogenesis

+2

他可能指的是[POSIX shell规范](http://pubs.opengroup.org/onlinepubs/9699919799/idx/xcu.html)。 – chepner

回答

2

如果使用基于Debian的分布,则可以使用checkbashisms其由devscripts中包提供命令。

这里是由checkbashisms highlighed一个bash特定构建体(一个bashism)的例子:在一个测试用的==代替=

 
$ cat b.sh 
#!/bin/sh 

VAR=foo 
if [ $VAR == bar ]; then 
    echo 'bar!' 
fi 
 
$ checkbashisms b.sh 
possible bashism in b.sh line 4 (should be 'b = a'): 
if [ $VAR == bar ]; then 
+0

我刚刚尝试了上面给出的示例脚本的checkbashisms,但没有得到任何结果。任何想法我做错了什么?这里是我运行的命令: $ checkbashisms test.sh,然后cli返回无输出, 其中test.sh包含上面给出的脚本。 – zuckermanori

+0

@zuckermanori,你在shebang中使用'/ bin/sh'而不是'/ bin/bash'吗? –

+0

是的,我做了@Christophe Vu-Brugier – zuckermanori

1

shellcheck工具(与#!/bin/sh一个家当)将赶上很多的bash-主义。

任何未被捕获的东西都应该作为对该项目的错误提交。如果他们不能执行,他们应该在合理的时间内添加。作者相当敏感。