Session Centos和RHEL系统之间$argv的行为是否相同

Session Centos和RHEL系统之间$argv的行为是否相同,session,tcl,centos7,argv,rhel6,Session,Tcl,Centos7,Argv,Rhel6,我正在尝试对一个名为GOTS-Grant的旧TCL记帐脚本进行故障排除。它所做的是为每个用户登录创建一个带有时间戳的日志文件条目,并为注销创建另一个日志文件条目。问题是它在注销时没有创建第二个日志文件条目。我想我找到了出错的地方,我把它贴在这里了。仅供参考,日志文件存在,并且不会退出,错误为“GOTS调用不正确!!”。它应该为[字符串匹配“$argv”“结束会话”]执行if-then 该软件在RHEL Linux 6.9上正常运行,但如Centos 7所述出现故障。我认为对于创建此行为的不同系统

我正在尝试对一个名为GOTS-Grant的旧TCL记帐脚本进行故障排除。它所做的是为每个用户登录创建一个带有时间戳的日志文件条目,并为注销创建另一个日志文件条目。问题是它在注销时没有创建第二个日志文件条目。我想我找到了出错的地方,我把它贴在这里了。仅供参考,日志文件存在,并且不会退出,错误为“GOTS调用不正确!!”。它应该为
[字符串匹配“$argv”“结束会话”]执行
if-then

该软件在RHEL Linux 6.9上正常运行,但如Centos 7所述出现故障。我认为对于创建此行为的不同系统,
$argv
参数向量中存在系统变量或差异

我怀疑
$argv
正确吗?如果没有,是否有人看到了真正的问题

如何在注销时打印或显示$argv值

# Find out if we're beginning or ending a session
if { [string match "$argv" "end_session"] } {
    if { ![file writable $Log] } {
    onErrorNotify "4 LOG"
    }
    set ifd [open $Log a]
    puts $ifd "[clock format [clock seconds]]\t$Instrument\t$LogName\t$GroupName"
    close $ifd
    unset ifd
    exit 0
} elseif { [string match "$argv" "begin_session"] == 0 } {
    puts stderr "GOTS was called incorrectly!!"
    exit -1
} 
结束会话由/etc/gdm/PostSession/Default文件填充

#/垃圾箱/垃圾箱
###开始GOTS后置会话
#如果root正在注销,则不要运行GOTS
如果测试“${USER}”=“root”;然后
出口0
fi
/usr/local/lib/GOTS/GOTS end_session>/var/tmp/GOTS_postsession.log 2>/var/tmp/GOTS_postsession.log
出口0
###结束GOTS后会话
有人知道什么可能会干扰会话后/默认设置吗

可能是你在打吗


也就是说,正如您的调查所显示的,这不再是一个与Tcl相关的问题了,我这样说对吗?

因此,我们的脚本有一些元素依赖于注销时运行的Xserver来显示一些GUI错误消息。本文件来自:

当用户终止会话时,GDM将运行会话后脚本。请注意,在运行此脚本时,Xserver将已停止,因此不应访问它

请注意,即使由于I/O错误或类似原因导致显示器无法响应,也会运行会话后脚本。因此,无法保证X应用程序在脚本执行期间正常工作。”


我们必须重写这些错误消息调用,以便它们只将错误写入文件,而不依赖于显示。这些错误都是在开始时就应该出现的。

我觉得这不像perl。你能给我看一下舍邦线吗?看起来像TCL。我刚刚为你编辑了它。我要做的第一件事是打印
$argv
的值,看看它是否符合您的期望。发布整个417行确实太多了。如果可能的话,把它缩小到一个说明问题的小程序a(遵循该链接)。在不同的linux平台上,
argv
不太可能得到不同的处理。您是在每个平台上以相同的方式调用脚本,还是每个平台都有自己的脚本最终调用您的tcl脚本?请显示如何调用脚本。有趣的是…它使用
string match
检查列表(
argv
在脚本执行后设置为命令行参数列表)与字符串的相等性。非常有趣的。。。我们确实使用了xrandr来指定显示镜像!