所以我试图在bash shell上创建脚本,我才知道该脚本不能在ksh或dash shell上运行。所以我的问题是如何使脚本在所有3个(bash,dash和ksh)shell上运行。
答案 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命令语言提供的内容。