Centos 7 c-shell if: Expression Syntax 발생.

amplifier   
   조회 6565   추천 0    

 안녕하세요?

최근에 Centos 7으로 어쩔 수 없이 업데이트하였습니다.

그런데 c-shell를 적용하는 과정에서 syntax error가 발생하여 도움을 얻고자 게시글을 작성합니다.


OS Centos 7 이며 커널 정보는 아래와 같습니다.

[root@wyverns ~]# uname -r

3.10.0-1062.el7.x86_64

[root@wyverns ~]# cat /proc/version 

Linux version 3.10.0-1062.el7.x86_64 (*********@********.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) ) #1 SMP Wed Aug 7 18:08:02 UTC 2019

기존 bash shell에서는 아무런 내용이 안뜨는데,

계정을 passwd 에서 c-shell로 적용할 경우, 아래와 같은 에러가 뜹니다.

Last login: Wed Apr  8 16:07:25 2020 from 192.168.0.57

if: Expression Syntax.

[root@wyverns ~]# 


이 상태에서 source .cshrc을 하게 될 경우 정상적으로 c-shell이 적용됩니다.


위 과정은 모두 DVD로 clean 설치한 이후 발생한 내용입니다.

여기서 if: Expression Syntax 에러가 발생하는 원인과 해결 방법을 알고 싶습니다.




안녕하세요
짧은글 일수록 신중하게.
amplifier 2020-04
내용을 추가하자면,

조사한 바로는 c-shell은 처음에
/etc/csh.cshrc 와 /etc/csh.login 2파일을 sourcing 하는것으로 나옵니다.

이 때, /etc/csh.login 에서
if ( -d /etc/profile.d ) then
        set nonomatch
        foreach i ( /etc/profile.d/*.csh /etc/profile.d/csh.local )
                if ( -r "$i" ) then
                                if ($?prompt) then
                                      source "$i"
                                else
                                      source "$i" >& /dev/null
                                endif
                endif
        end
        unset i nonomatch
endif

이 내용을 처리하는 과정에서 위와 같은 error가 나오는 것으로 확인하였습니다.
화랑화랑 2020-04
~/.login

도 올려주셔야...
     
amplifier 2020-04
OS clean 설치이후, /etc/csh.login 이나 /etc/csh.cshrc 를 수정하진 않았습니다.

아래는 /etc/csh.login 파일 내용입니다.
# /etc/csh.login

# System wide environment and startup programs, for login setup

#add sbin directories to the path
foreach p ( /usr/local/sbin /usr/sbin )
        switch (":${PATH}:")
        case "*:${p}:*":
                breaksw
        default:
                if ( $uid == 0 ) then
                        set path = ( ${p} ${path:q} )
                else
                        set path = ( ${path:q} ${p} )
                endif
                breaksw
        endsw
end

setenv HOSTNAME `/usr/bin/hostname`
set history=1000

if ( -d /etc/profile.d ) then
        set nonomatch
        foreach i ( /etc/profile.d/*.csh /etc/profile.d/csh.local )
                if ( -r "$i" ) then
                                if ($?prompt) then
                                      source "$i"
                                else
                                      source "$i" >& /dev/null
                                endif
                endif
        end
        unset i nonomatch
endif
amplifier 2020-04
해결책을 발견하여, 여기 댓글에 남깁니다.
RHEL 7 또는 CENTOS 7 OS에 존재하는 버그입니다.
이 버그는 csh을 사용하는 계정을 로그인하는 과정중, sourcing되는 파일들 내용들 중에서 csh 형태가 아닌 bash 형태의 if 문법이 남아 있어서 발생한 문제입니다.
앞서 이러한 버그는 report가 되었으며, 이를 fix하기 위한 내용도 이미 업데이트 된 상태입니다.
해결 방법은 yum install kde-settings 과정을 통해, 업데이트 하게 되면, csh login 과정에서 발생하는 if: Expression Syntax 문제가 해결됩니다.

해결책을 찾은 링크는 아래에 내용을 보고 해결하였습니다.
https://bugzilla.redhat.com/show_bug.cgi?id=1738491

저와 비슷한 문제를 겪는 사람들도 이 내용을 보고 꼭 해결하셨으면 좋겠습니다.


QnA
제목Page 5457/5718
2014-05   5212982   정은준1
2015-12   1744168   백메가
2016-10   10278   겨울나무
2024-12   545   starname
2014-06   4904   2CPU최주희
2024-12   680   무쏘뿔처럼
2014-06   7163   아름다운노을
2015-10   4886   나파이강승훈
2017-11   4321   미담
2019-02   4250   패킷스트림
2017-11   3984   지수삼촌
2014-06   5650   둥가당
2021-08   5753   galaxyfamily
01-21   615   화란
2019-02   2787   머라카는데
2020-04   4804   DeepSky
2020-04   6566   amplifier
2009-07   6284   남성룡
2015-11   4838   하안
2016-10   5403   FreeBSD
2021-08   3067   VSPress
2014-07   6366   dotlee