在呼叫為“sh”的非完整 bash 登錄上執行腳本
我目前正在嘗試修改我的終端,以使提示以與外殼的其餘部分不同的顏色顯示,並且我想讓普通使用者將其設置為白色,將 root 設置為紅色。
我想在 OS X 10.10 桌面和 Ubuntu 14.10 伺服器上都這樣做。
我知道這樣做的唯一方法是修改
$PS1
.為此,我必須將其放入 shell 在登錄時提供的腳本中,對嗎?
但是,在 OS X 上,root 使用者的 shell 是
/bin/sh
,雖然這實際上是 bash,但它不會獲取任何登錄腳本,除非呼叫完全登錄。現在我知道了
su - <user>
,但我需要它來工作su <user>
。我可以更改 root 使用者的登錄 shell,但我不希望.
這是我到目前為止發現的:
bash
呼叫並作為源bash
登錄:su -
/etc/profile /etc/bashrc ~/.profile
bash
呼叫並作為源bash
登錄:su
~/.bashrc
bash
呼叫並作為源sh
登錄:su -
/etc/profile /etc/bashrc ~/.profile
bash
呼叫sh
和登錄作為su
源根本沒有。我也嘗試過劫持
$PROMPT_COMMAND
,但在呼叫時會被清空su
。在bash 手冊上它說:
使用名稱 sh 呼叫
如果使用 name 呼叫 Bash
sh
,它會盡可能地模仿歷史版本的啟動行為sh
,同時也符合 POSIX 標準。當作為互動式登錄 shell 或作為帶有
--login
選項的非互動式 shell 呼叫時,它首先嘗試按順序從/etc/profile
and讀取和執行命令~/.profile
。該--noprofile
選項可用於禁止此行為。當作為互動式 shell 呼叫時sh
,Bash 會查找變數ENV
,如果已定義則擴展其值,並使用擴展後的值作為要讀取和執行的文件的名稱。由於呼叫 as 的 shellsh
不會嘗試從任何其他啟動文件讀取和執行命令,因此該--rcfile
選項無效。使用該名稱呼叫的非互動式 shellsh
不會嘗試讀取任何其他啟動文件。當呼叫 as 時
sh
,Bash 在讀取啟動文件後進入 POSIX 模式。所以…有什麼辦法可以設置
$ENV
嗎?在呼叫之前簡單地設置它
su
沒有任何效果。或者,當 UID 更改(是否完全登錄)時,我有什麼其他方法可以修改
$PS1
,而無需使用su - ...
、更改 root 使用者的登錄 shell 或弄亂su
/bash
?
su -c bash
如果這對您來說輸入太多,請創建一個別名。
您已經正確分析了plain
su
不會載入任何初始化文件,因此您要麼需要更改配置,要麼需要更改命令。
我個人在我的 Mac 上使用它,它也在我的 Ubuntu 伺服器上執行。但我編輯了兩個文件。
在根的 .profile 我放
PS1="\[\033[1;31m\]\u\[\e[m\]@\h \[\e[0;32m\]\w\[\e[m\] \$ " # Root
在我個人使用者的 .bash_profile 中,我放了
PS1="\[\033[1;32m\]\u\[\e[m\]@\h \[\e[0;32m\]\w\[\e[m\] \$ " # User
效果如下:
您可以在這裡找到所有顏色http://blog.taylormcgann.com/tag/prompt-color/
但在你的情況下,我認為你應該使用這個解決方案 https://unix.stackexchange.com/a/174/50145