exec /bin/tcsh는 "if:expression 구문"을 생성합니다. 실수

exec /bin/tcsh는 "if:expression 구문"을 생성합니다. 실수

우리는 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, 그러나 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.

관련 정보