在多个shell上运行bash脚本

时间:2019-03-27 14:19:59

标签: linux macos shell

所以我试图在bash shell上创建脚本,我才知道该脚本不能在ksh或dash shell上运行。所以我的问题是如何使脚本在所有3个(bash,dash和ksh)shell上运行。

3 个答案:

答案 0 :(得分:0)

您需要这样的文件:

#!/bin/bash   #isn't a simple comment 
echo "hello bash"

#!/bin/sh     #isn't a simple comment 
echo "hello sh"

#!/bin/ksh    #isn't a simple comment 
echo "hello ksh"

(#!)称为shebang,它告诉Shell用什么程序解释脚本

您最好将此文件称为(file.bsk),但不要忘了给它提供执行许可:

chmod +x file.bsk

然后运行./file.bsk

答案 1 :(得分:0)

某些命令或实用程序并非在所有Shell中都可用,或者它们在不同Shell中可能具有不同的行为。如果您知道哪个库运行在哪个shell上或提供了所需的输出,则可以编写以下特定于shell的命令

bash -c 'echo bash'

ksh -c 'echo ksh'

所有其他shell通用的命令都可以用普通方式编写。

答案 2 :(得分:0)

为了编写保证可在各种外壳之间移植的脚本,该脚本必须符合POSIX Shell。 POSIX是所有符合标准的外壳程序必须支持的最少的内置命令和命令集。 Ash,Dash,Zsh,Bash,Ksh等都是能够运行POSIX兼容脚本的shell。

像Bash这样的shell要做的是添加一些不错的功能,这些功能使shell更强大,例如用于转换为大写/小写,子字符串替换等的其他参数扩展。以及诸如{{ 1}}提供了正则表达式匹配功能等。虽然这使Bash更加强大,但是这也意味着使用“ Bashisms ”编写的脚本不再能够在所有其他Shell下运行。 Ash,Dash和其他最小化外壳不知道如何处理Bash,Ksh或Zsh添加的功能,因此会失败。

要编写真正可移植的脚本,必须将内容限制为POSIX命令语言提供的内容。