OS X El Captainでrootを有効にしています。 stackoverflow および supers ですでに提供されているソリューションのいくつかを試しましたが、エラーを修正できませんでした。 _.bash_profile
_からfunction parse_git_branch()
を_.bash_Prompt
_にエクスポートしましたが、それでもこのエラーが発生します。私はbashスクリプトを知らないので、何が起こっているのか、何が修正されるのかわかりません。
_abhimanyuaryan at Macbook in ~
$ Sudo su
sh: parse_git_branch: command not found
root at Macbook in /Users/abhimanyuaryan
_
.bash_profile
_if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi
# Add Homebrew `/usr/local/bin` and User `~/bin` to the `$PATH`
PATH=/usr/local/bin:$PATH
PATH=$HOME/bin:$PATH
export PATH
# Load the Shell dotfiles, and then some:
# * ~/.path can be used to extend `$PATH`.
# * ~/.extra can be used for other settings you don’t want to commit.
for file in ~/.{path,bash_Prompt,exports,aliases,functions,extra}; do
[ -r "$file" ] && source "$file"
done
unset file
_
.bash_Prompt
_# @gf3’s Sexy Bash Prompt, inspired by “Extravagant Zsh Prompt”
# Shamelessly copied from https://github.com/gf3/dotfiles
# Screenshot: http://i.imgur.com/s0Blh.png
if [[ $COLORTERM = gnome-* && $TERM = xterm ]] && infocmp gnome-256color >/dev/null 2>&1; then
export TERM=gnome-256color
Elif infocmp xterm-256color >/dev/null 2>&1; then
export TERM=xterm-256color
fi
if tput setaf 1 &> /dev/null; then
tput sgr0
if [[ $(tput colors) -ge 256 ]] 2>/dev/null; then
# Changed these colors to fit Solarized theme
Magenta=$(tput setaf 125)
ORANGE=$(tput setaf 166)
GREEN=$(tput setaf 64)
PURPLE=$(tput setaf 61)
WHITE=$(tput setaf 244)
else
Magenta=$(tput setaf 5)
ORANGE=$(tput setaf 4)
GREEN=$(tput setaf 2)
PURPLE=$(tput setaf 1)
WHITE=$(tput setaf 7)
fi
BOLD=$(tput bold)
RESET=$(tput sgr0)
else
Magenta="\033[1;31m"
ORANGE="\033[1;33m"
GREEN="\033[1;32m"
PURPLE="\033[1;35m"
WHITE="\033[1;37m"
BOLD=""
RESET="\033[m"
fi
export Magenta
export ORANGE
export GREEN
export PURPLE
export WHITE
export BOLD
export RESET
function parse_git_dirty() {
[[ $(git status 2> /dev/null | tail -n1) != *"working directory clean"* ]] && echo "*"
}
function parse_git_branch() {
git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/\1$(parse_git_dirty)/"
}
export PS1="\[${BOLD}${Magenta}\]\u \[$WHITE\]at \[$ORANGE\]\h \[$WHITE\]in \[$GREEN\]\w\[$WHITE\]\$([[ -n \$(git branch 2> /dev/null) ]] && echo \" on \")\[$PURPLE\]\$(parse_git_branch)\[$WHITE\]\n\$ \[$RESET\]"
export PS2="\[$ORANGE\]→ \[$RESET\]"
_
ここでの問題は、Sudo su
を実行すると、rootに変更されますが、独自のプロファイルを保持していることです。そのプロファイルには、bash関数を参照するコマンドプロンプトの設定が含まれています。しかし、ルートにSudoすると、ルートのシェル(sh
ではなくbash
)が取得されます。そのため、bash構成に依存する変更は、あなたが参照している関数を含め、機能しませんPS1
。
したがって、最初に行うことは、Sudoを実行するときに、shではなくbashを実際に実行していることを確認することです。これは非常に簡単です。Sudo su
を実行する代わりに、Sudo bash
を実行するだけです。
Sudoはデフォルトでrootに切り替えるので、単にrootユーザーのデフォルトシェルに切り替えるのではなく、bashシェルをrootとして実行することになります。
それでも問題が解決しない場合は、現在のユーザーのホームディレクトリへの参照が含まれている.bash_profileが原因である可能性があります。これは、次の行で~
を指しているためです。
for file in ~/.{path,bash_Prompt,exports,aliases,functions,extra}; do
[ -r "$file" ] && source "$file"
done
自分でbashを実行すると、~
は自分のホームディレクトリに展開されますが、rootとして実行すると、/var/root
と評価され、ファイルが検索されます。
これを修正する方法は3つあります。好きな方を選んでください。
/var/root
にコピーしますSudo su
を実行する代わりに、Sudo su -
を実行します。これはあなたの代わりにあなたのルートの環境を与えます。欠点は、独自の環境変更がすべて利用できなくなり、sh
ではなくbash
が実行されることです。 (一部のオペレーティングシステムでは同じものがありますが、異なるものもあります。MacOSXは、sh
とbash
が異なるものの1つだと思います。)$ PS1をエクスポートしましたか?コマンドを実行して確認できます:
printenv
それ以外の場合は、次のコマンドを実行してエクスポートする必要があります。
export -n PS1
sudoまたはSudo suを問題なく実行できるようになった後