"tcsh"에 대한 프롬프트가 "tcsh" 또는 "csh"로 호출되었는지에 따라 다른 이유는 무엇입니까?

"tcsh"에 대한 프롬프트가 "tcsh" 또는 "csh"로 호출되었는지에 따라 다른 이유는 무엇입니까?

Ubuntu 15.10에 패키지를 설치 했는데 tcsh호출 방법에 따라 프롬프트가 달라졌습니다 tcsh.

첫째, Ubuntu 15.10에서는 tcsh실제로 csh동일한 실행 파일입니다.

$ cmp /bin/tcsh /bin/csh && echo 'same' || echo 'different'
same

$ /bin/tcsh
hostname:/tmp>

$ /bin/tcsh -f
>

그리고 /bin/csh퍼센트 기호로 끝납니다

$ /bin/csh
hostname:/tmp%

$ /bin/csh -f
%

.cshrc아직 하나 또는 파일을 설정하지 않았습니다 .tcshrc. tcsh프롬프트의 마지막 문자로 사용할 문자를 결정하려면 argv의 첫 번째 요소를 확인하세요 .

/etc/csh.cshrc파일에는 프로그램이 으로 호출되는 경우 프롬프트를 변경하는 논리가 포함되어 있지만 tcsh이러한 방식으로 프롬프트를 설정하면 마지막 문자가 에서 로 변경되는 이유가 명확하지 >않습니다 %. 이 플래그가 제공 되면 -f파일도 무시됩니다.

# /etc/csh.cshrc: system-wide .cshrc file for csh(1) and tcsh(1)

if ($?tcsh && $?prompt) then

    bindkey "\e[1~" beginning-of-line # Home
    bindkey "\e[7~" beginning-of-line # Home rxvt
    bindkey "\e[2~" overwrite-mode    # Ins
    bindkey "\e[3~" delete-char       # Delete
    bindkey "\e[4~" end-of-line       # End
    bindkey "\e[8~" end-of-line       # End rxvt

    set autoexpand
    set autolist
    set prompt = "%U%m%u:%B%~%b%# "
endif

답변1

매뉴얼 페이지에는 표시되지 않지만 소스 코드는 프로그램이 호출되는지 확인합니다 tcsh. 그 경우, 코드 설정 질문에 설명된 팁:

역사 = '!';
HISTSUB = '^';
PRCH = tcsh ? '>' : '%'; /* 일반 사용자의 경우 $prompt에서 %# 바꾸기 */
PRCHROOT = '#'; /* 루트와 동일 */
word_chars = STR_WORD_CHARS;
bslash_quote = 0; /* PWP: tcsh 스타일의 백슬래시 따옴표를 사용합니까? */

프로그램 논리는 읽기가 매우 쉽습니다.

    {
        차트;

        t = strrchr(argv[0], '/');
#ifdef WINNT_NATIVE
        {
            char *s = strrchr(argv[0], '\\');
            만약(들)
                t = s;
        }
#endif /* WINNT_NATIVE */
        t = ? t + 1 : 인수[0];
        if (*t == '-') t++;
        프로그램 이름 = strsave((t && *t) ? t : tcshstr) /* 절대 null이 아닙니다 */
        tcsh = strncmp(프로그램 이름, tcshstr, sizeof(tcshstr) - 1) == 0;
    }

그리고

static const char tcshstr[] = "tcsh";

tcsh10예를 들어 이름이 지정되어 있으면 테스트를 통과하지 못할 것입니다.

관련 정보