Bash

在呼叫為“sh”的非完整 bash 登錄上執行腳本

  • January 22, 2016

我目前正在嘗試修改我的終端,以使提示以與外殼的其餘部分不同的顏色顯示,並且我想讓普通使用者將其設置為白色,將 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/profileand讀取和執行命令~/.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

如果這對您來說輸入太多,請創建一個別名。

您已經正確分析了plainsu不會載入任何初始化文件,因此您要麼需要更改配置,要麼需要更改命令。

我個人在我的 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

引用自:https://unix.stackexchange.com/questions/194685