如何从ksh脚本中安全地获取ksh的版本?
我已经看到以下解决方案:
ksh --version
echo ${.sh.version}
echo $KSH_VERSION
在适当的情况下,所有这些方法都可以正常工作。但是,我关心的是不完美的情况。
具体来说,我使用的几台机器具有较旧的ksh版本,出于我的目的,这些版本严重缺乏功能。无论如何,我要(以编程方式)检查版本的原因是要查看ksh版本是否为功能较弱的版本之一。如果是这样,我想用不太出色的代码执行分支。
但是,在有问题的机器上,shell的能力不足导致无法检查版本...
- 如果我尝试
ksh --version
,它什么也不打印,并打开一个新实例ksh
! 如果尝试
echo ${.sh.version}
,ksh
将其视为语法错误,不能使用丢弃2> /dev/null
。$ echo ${.sh.version} 2> /dev/null ksh: ${.sh.version}: bad substitution
当然
echo $KSH_VERSION
看起来可以正常工作-我的意思是它不会崩溃-尽管在这些机器上它是空白的。另外,我看到的地方是KSH_VERSION
只被设定pdksh
。
问题:
- 如何安全地以
ksh
编程方式检查版本?就我的目的而言,我并不在乎实际的版本号是多少,而只是它是否是的过时版本ksh
。 - 是否
$KSH_VERSION
足够好?我的意思是,如果空白,那么ksh
一定是过时的版本吗?该其他论坛是否正确,即使对于较新版本的,也可能未设置ksh
? - 根本没有办法检查吗?
PS1
为使用此函数。然而,旧的ksh不支持$()
在PS1
。因此,如果它是ksh的现代版本,我想PS1
使用我创建的功能;如果是旧版本,我只使用$PWD
。