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
、しかし、csh
でtcsh
表されます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。