「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まだ1つまたはファイルを設定していません.tcshrctcshプロンプトの最後の文字として使用する文字を決定するには、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たとえば、名前が指定されている場合、テストに合格しない可能性があります。

関連情報