!["tcsh"에 대한 프롬프트가 "tcsh" 또는 "csh"로 호출되었는지에 따라 다른 이유는 무엇입니까?](https://linux55.com/image/6317/%22tcsh%22%EC%97%90%20%EB%8C%80%ED%95%9C%20%ED%94%84%EB%A1%AC%ED%94%84%ED%8A%B8%EA%B0%80%20%22tcsh%22%20%EB%98%90%EB%8A%94%20%22csh%22%EB%A1%9C%20%ED%98%B8%EC%B6%9C%EB%90%98%EC%97%88%EB%8A%94%EC%A7%80%EC%97%90%20%EB%94%B0%EB%9D%BC%20%EB%8B%A4%EB%A5%B8%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
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
예를 들어 이름이 지정되어 있으면 테스트를 통과하지 못할 것입니다.