我tcsh
在 Ubuntu 15.10 上安装了该软件包,提示符根据我调用的方式而有所不同tcsh
。
首先,在 Ubuntu 15.10 上,tcsh
确实csh
是相同的可执行文件:
$ cmp /bin/tcsh /bin/csh && echo 'same' || echo 'different'
same
$ /bin/tcsh
hostname:/tmp>
$ /bin/tcsh -f
>
而 with/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 = '#'; /* 同样对于 root */ word_chars = STR_WORD_CHARS; bslash_quote = 0; /* PWP: 进行 tcsh 风格的反斜杠引用吗? */
程序逻辑相当容易阅读:
{ 图表; t = strrchr(argv[0], '/'); #ifdef WINNT_NATIVE { char *s = strrchr(argv[0], '\\'); 如果(s) t = s; } #endif /* WINNT_NATIVE */ t = t ? t + 1 : argv[0]; if (*t == '-') t++; 程序名 = strsave((t && *t) ? t : tcshstr); /* 永远不要 null */ tcsh = strncmp(程序名, tcshstr, sizeof(tcshstr) - 1) == 0; }
和
static const char tcshstr[] = "tcsh";
tcsh10
因此,例如,如果它被命名为 ,则它不会通过测试。