加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 使Unix shell脚本符合POSIX标准

发布时间:2020-12-13 19:54:38 所属栏目:Linux 来源:网络整理
导读:我一直在研究一个 shell脚本来自动执行某些任务.确保shell脚本在大多数平台上运行时没有任何问题的最佳方法是什么.例如,我一直使用echo -n命令将一些消息打印到屏幕而没有尾随的新行,并且-n开关在某些ksh shell中不起作用.我被告知脚本必须符合POSIX标准.如
我一直在研究一个 shell脚本来自动执行某些任务.确保shell脚本在大多数平台上运行时没有任何问题的最佳方法是什么.例如,我一直使用echo -n命令将一些消息打印到屏幕而没有尾随的新行,并且-n开关在某些ksh shell中不起作用.我被告知脚本必须符合POSIX标准.如何确保脚本符合POSIX标准.有工具吗?或者是否有一个只支持最低POSIX要求的shell?

解决方法

POSIX

第一步,它为您提供有效和无效的指示,是将shebang设置为/ bin / sh和use shellcheck site来分析您的脚本.
例如,将此脚本粘贴到shellcheck编辑器窗口中:

#!/bin/sh
read -r a b <<<"$1"
echo $((a+b))

得到一个指示:“在POSIX sh中,here-strings未定义”.

第二步,您可以使用与POSIX兼容的shell.
一个与大多数其他简单shell兼容的shell,is dash,Debian默认系统shell,它是旧BSD灰的衍生物.

与posix兼容的另一个外壳是豪华的.

但是,破折号和/或豪华版可能无法用于某些系统.

有lksh(具有ksh风格),目标是与传统(旧)shell脚本兼容.从其手册:

lksh is a command interpreter intended exclusively for running legacy shell scripts.

但是在调用lksh时需要使用选项,比如-o posix和-o sh:

Note that it’s strongly recommended to invoke lksh with at least the -o posix option,if not both that and -o sh,to fully enjoy better compatibility to the POSIX standard (which is probably why you use lksh over mksh in the first place) or legacy scripts,respectively.

您可以调用lksh -o posix -o sh而不是简单的lksh.

使用选项是一种使其他shell与POSIX兼容的方法.像lksh一样,使用-o posix选项,比如bash -o posix.

在bash中,甚至可以在脚本中打开POSIX选项,其中包括:

shopt -o posix            # also with: set -o posix

也可以创建一个bash或zsh的本地链接,使其既像旧的sh shell一样.像这样:

$ln -s /bin/bash ./sh
$./sh

有很多替代方案(破折号,豪华版,lksh,bash,zsh等)来获得一个可以用作POSIX shell的shell.

手提

然而,即便如此,以上所有都不能确保“便携性”.

不幸的是,使shell脚本“符合POSIX”通常比在任何真实的shell上运行更容易.

唯一真实世界的明智建议是在几个shell中测试你的脚本.
像上面的列表:dash,posh,lksh和bash –posix.

Solaris本身就是一个世界,可能你需要针对/ bin / sh和xpg4 / sh进行测试.

跟进:

How can I test for POSIX compliance for shell scripts?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读