用未定义的变量重定向回声

时间:2015-06-19 16:24:30

标签: solaris ksh flags

我在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变量。这是从migrationHPUX环境的脚本SOLARIS,客户认为它们必须具有与之前相同的结果(我们在执行之前取消设置FILE变量以进行测试)。

2 个答案:

答案 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的帮助。