我在solaris 11中运行一个脚本,其结果取决于使用的shell。
脚本的回显重定向到由环境值给出的文件:
echo "STARTING EXEC" >> $FILE
PS。 EXEC只是脚本显示的消息,它没有使用exec
命令。
如果我在没有定义变量FILE的情况下执行脚本(使用/usr/bin/ksh
):
./start.sh[10]: : cannot open
并且脚本继续执行。
ksh的标志是:
echo $-
imsuBGEl
但如果我改为/usr/xpg4/bin/sh
,脚本会在stdout中显示回显,并且没有显示错误。
xpg4 sh的标志是:
echo $-
imsu
我尝试使用set +-
更改标记(我无法移除El标记,但BG可以删除),但无法获得相同的行为。
我可以做些什么来使用没有cannot open error
的ksh获得相同的结果吗?
/usr/bin/ksh --version
version sh (AT&T Research) 93u 2011-02-08
我希望脚本继续运行,在stdout中显示消息,而不是像现在一样显示错误。
就像shellter在评论中所说的那样,好的做法是在做任何事之前检查是否定义了FILE变量。这是从migration
到HPUX
环境的脚本SOLARIS
,客户认为它们必须具有与之前相同的结果(我们在执行之前取消设置FILE变量以进行测试)。
答案 0 :(得分:0)
您可能正在运行Solaris 11,而不是Solaris 64。
如果您希望让脚本在Solaris 11下运行而无需在任何地方搜索虚假重定向,您可以简单地用#!/usr/xpg4/bin/sh
替换所有shebang(第一行)。
答案 1 :(得分:0)
我们要采用的最终解决方案是install the ksh88 package
,并将其用作默认shell(/usr/sunos/bin/ksh
)。这个shell具有与之前客户端相同的行为,我们可以不对这些脚本进行修改。
solaris 11中使用的ksh是93(http://docs.oracle.com/cd/E23824_01/html/E24456/userenv-1.html#shell-1)
感谢@jlliagre和@shellter的帮助。