Tcsh為什麼
為什麼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 >
而
/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
我在手冊頁中看不到它,但原始碼檢查程序是否被呼叫
tcsh
。如果是,則程式碼會按照問題中的說明設置提示:HIST = '!'; 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], '\\'); 如果(S) t = s; } #endif / * WINNT_NATIVE * / t = t ? t + 1 : argv[0]; if (*t == '-') t++; progname = strsave((t && *t) ? t : tcshstr); /* 永遠不要空值 */ tcsh = strncmp(progname, tcshstr, sizeof(tcshstr) - 1) == 0; }
和
static const char tcshstr[] = "tcsh";
tcsh10
因此,例如,如果它被命名,它就不會通過測試。