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
按鍵呢?
答案在後面的學習中給出)。
不同的命令可以接受的命令的格式各有不同, 一般情況下,一個標準的命令行格式為如下所列:
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之下的外部命令
每一個命令行均必須包含命令的名稱,這是不能缺少的。