exec /bin/tcsh 生成“if:表达式语法”。错误

exec /bin/tcsh 生成“if:表达式语法”。错误

我们有两台服务器:装有 Oracle Linux 7.6 的测试箱和装有 Oracle Linux 7.7 的生产箱。

运行 exec /bin/tcsh 命令会产生两个不同的结果。

在测试服务器上:

# exec /bin/tcsh
#

没有错误;但是,在生产服务器上:

# exec /bin/tcsh
if: Expression Syntax.
#

我们认为生产包装盒上的 tcsh 软件包存在问题,并卸载/重新安装了它,但这样做并没有解决问题。关于我们还可以尝试解决此问题的任何想法/建议?

其中一条评论建议将 -V 添加到命令中。以下是输出的最后几行:

if ( $?QT_PLUGIN_PATH ) then
if ( "${QT_PLUGIN_PATH}" !~ *${libdir}/kde4/plugins* ) then
else

end


if [ ! -d ${HOME}/.local/share -a -w ${HOME} ] then
if: Expression Syntax.

有一个测试服务器,其中 exec 命令不会异常终止。这是上面同一行的 -V 输出:

if ( ! -d ${HOME}/.local/share ) then

唯一不同的是-a -w ${HOME}.

答案1

此类错误消息可能是由 shell 执行的登录脚本中的语法错误引起的tcsh

  • 全系统/etc/csh.cshrc
  • 全系统/etc/csh.login
  • 特定于用户的~/.cshrc
  • 特定于用户的~/.login

在 Bourne/POSIX 风格的 shell 中,if语句通常是if [ condition ]; then ... else ... fi, butcsh并将tcsh其表示为if (condition) then ... else ... endif。如果您习惯于 Bourne/POSIX 风格的脚本编写,那么fiendiftcsh.

答案2

答案是kde-settings包中有一个bug。 kde.csh 中有 bourne-shell 代码。

我们决定执行解决方法并按以下方式编辑 /etc/profile.d/kde.csh 文件:

原行: if [ ! -d ${HOME}/.local/share -a -w ${HOME} ]

编辑行: if ( ! -d ${HOME}/.local/share && -w ${HOME} )

版本-所选组件的发布号(如果适用):kde-settings-19-23.9.el7.noarch

这是服务器上安装的版本。有一个可用更新,但未安装,kde-settings-19-23.10。这是 bugzilla 的链接: https://bugzilla.redhat.com/show_bug.cgi?id=1738491

相关内容