우리는 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
이러한 오류 메시지는 쉘에서 실행되는 로그인 스크립트의 구문 오류로 인해 발생할 수 있습니다 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.