##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 prompt`與`CR`之間所輸入的文字。
(**question:為何我們這里堅持使用`CR`字符而不說`Enter`按鍵呢?
答案在后面的學習中給出**)。
不同的命令可以接受的命令的格式各有不同,
一般情況下,一個標準的命令行格式為如下所列:
```shell
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之下的外部命令
每一個命令行均必須包含命令的名稱,這是不能缺少的。