關於根文件系統中命令行提示符的顯示

我們經常用busybox生成根文件系統,可是根文件系統起來以後命令行提示符只有一個“#”號,沒有像linux發行版那樣是[user@hostname currentpath] #,那麼我們這裏就說說如何讓我們的根文件系統按這個方式顯示。

要修改命令行提示符,首先我們需要知道一個環境變量PS1,我們可以查看bash的幫助文檔查看關於PS1的說明:

bash有兩級命令提示符,我們這裏說的是第一級,這一級缺省的提示符是字符“$”(超級用戶是“#”),我們可以通過修改PS1修改這個提示符,格式爲:
        PS1=”command list”

命令列表有很多參數如下:
        \! 顯示該命令的歷史記錄編號。
        \# 顯示當前命令的命令編號。 
        \$ 顯示$符作爲提示符,如果用戶是root的話,則顯示#號。 
        \\ 顯示反斜槓。 
        \d 顯示當前日期。 
        \h 顯示主機名。 
        \n 打印新行。 
        \nnn 顯示nnn的八進制值。 
        \s 顯示當前運行的shell的名字。 
        \t 顯示當前時間。 
        \u 顯示當前用戶的用戶名。 
        \W 顯示當前工作目錄的名字。 
        \w 顯示當前工作目錄的路徑

我們查看我們發行版linux中的PS1.

$echo echo $PS1
        [\u@\h \W] \$

看了發行版是如何顯示命令行提示符,那麼我們再看一下爲什麼我們做的根文件系統只顯示一個#,用busybox生成的根文件系統使用的是ash,我們看下busybox中關於ash的文件。

在busybox-1.15.4/shell/ash.h中有這樣的語句

/*
        * PS1 depends on uid
        */
#if ENABLE_FEATURE_EDITING && ENABLE_FEATURE_EDITING_FANCY_PROMPT
        vps1.text = "PS1=\\w \\$ ";
#else
        if (!geteuid())
                vps1.text = "PS1=# ";
#endif

結合上面PS1參數我們可以看出在busybox生成的根文件系統中可能出現兩種顯示方式:

一種默認顯示是“currentpath $”; 另一種默認顯示是 “#”這兩種顯示在較老的版本中都有。

 

按照上面的方法修改我們的根文件系統中的命令行提示符。首先我們需要修改buxybox中配置,添加如下兩個選項:

Busybox Settings --->
                Busybox Library Tuning --->
                        [*] Username completion
                        [*] Fancy shell prompts

創建/etc/hostname添加如下內容(我們的主機名):
        farsight

修改/etc/init.d/rcS添加如下內容(導入主機名配置文件):
        /bin/hostname –F /etc/hostname

修改根文件系統中/etc/profile文件添加如下內容:

HOSTNAM=`/bin/hostname`
        PS1=`[\u@\h \W]\# `
        export PS1 HOSTNAME

創建/etc/passwd添加如下內容:
        root:x:0:0:root:/root:/bin/sh

這個時候我們重新啓動我們的開發板會發現命令行提示符已經是我們想要的那種現實了:
        [root@farsight /etc] #

發佈了26 篇原創文章 · 獲贊 29 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章