shell十三問之2:shell prompt(PS1)與Carriage Return(CR)關係


當你成功登陸一個shell終端的文字界面之後,大部分的情形下, 你會在屏幕上看到一個不斷閃爍的方塊或者底線(視不同的版本而別), 我們稱之為遊標(cursor). cursor作用就是告訴你接下來你從鍵盤輸入的按鍵所插入的位置, 且每輸入一個鍵,cursor便向右移動一個格子, 如果連續輸入太多的話,則自動接在下一行輸入。

假如你剛完成登陸,還沒有輸入任何按鍵之前, 你所看到的cursor所在的位置的同一行的左邊部分,我們稱之為提示符(prompt)。

提示符的格式或因不同的版本而各有不同, 在Linux上,只需留意最接近遊標的一個提示符號,通常是如下兩者之一:

  • $: 給一般用戶賬號使用;
  • #: 給root(管理員)賬號使用;

事實上,shell prompt的意思很簡單: 告訴shell使用者,您現在可以輸入命令行了。

我們可以說,使用者只有在得到shell prompt才能打命令行, 而cursor是指示鍵盤在命令行的輸入位置,使用者每輸入一個鍵, cursor就往後移動一個格,直到碰到命令行讀進CR(Carriage Return, 由Enter鍵產生)字符為止。 CR的意思也很簡單: 使用者告訴shell:老兄,你可以執行的我命令行了。 嚴格來說: 所謂的命令行, 就是在shell promptCR之間所輸入的文字。

(question:為何我們這裡堅持使用CR字符而不說Enter按鍵呢? 答案在後面的學習中給出)。

不同的命令可以接受的命令的格式各有不同, 一般情況下,一個標準的命令行格式為如下所列:

command-name options argument

若從技術的細節上來看, shell會依據IFS(Internal Field Seperator) 將 command line 所輸入的文字給拆解為字段(word). 然後在針對特殊的字符(meta)先做處理,最後在重組整行command line。

(注意:請務必理解以上兩句的意思,我們日後的學習中常回到這裡思考。)

其中IFS是shell預設使用的字段位分隔符號,可以由一個及多個如下按鍵組成:

  • 空白鍵(White Space)
  • 表格鍵(Tab)
  • 回車鍵(Enter)

系統可以接受的命令的名稱(command-name)可以從如下途徑獲得:

  • 確定的路徑所指定的外部命令
  • 命令的別名(alias)
  • shell內建命令(built-in)
  • $PATH之下的外部命令

每一個命令行均必須包含命令的名稱,這是不能缺少的。