为什么“tcsh”的提示符会有所不同,具体取决于它是作为“tcsh”还是“csh”调用

为什么“tcsh”的提示符会有所不同,具体取决于它是作为“tcsh”还是“csh”调用

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因此,例如,如果它被命名为 ,则它不会通过测试。

相关内容