exec /bin/tcsh は "if:expression 構文" を生成します。間違い

exec /bin/tcsh は "if:expression 構文" を生成します。間違い

Oracle Linux 7.6を含むテストボックスとOracle Linux 7.7を含む本番ボックスの2つのサーバーがあります。

exec /bin/tcsh コマンドを実行すると、2 つの異なる結果が生成されます。

テストサーバーから:

# exec /bin/tcsh
#

ただし、本番サーバーではエラーはありません。

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

本番ボックスのtcshパッケージに問題があると思って削除/再インストールしましたが、問題は解決しませんでした。この問題を解決しようとする他のアイデア/提案がありますか?

コメントの1つは、コマンドに-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

これらのエラーメッセージは、シェルで実行されているログインスクリプトの構文エラーが原因で発生する可能性がありますtcsh

  • システム全体/etc/csh.cshrc
  • システム全体/etc/csh.login
  • ユーザー別~/.cshrc
  • ユーザー別~/.login

Bourne / POSIXスタイルのシェルでは、ifステートメントは通常if [ condition ]; then ... else ... fi、しかし、cshtcsh表されますif (condition) then ... else ... endif。 Bourne fi/ POSIXスタイルのスクリプトendifに精通している場合tcsh

答え2

答えは、kde-settingsパッケージにバグがあるということです。 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

関連情報