mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2024-11-25 09:41:20 +08:00
feat(init): show error and process tree if OMZ is loaded from non-zsh shells (#10234)
This commit is contained in:
parent
c6c364317d
commit
7152a94280
38
oh-my-zsh.sh
38
oh-my-zsh.sh
|
@ -1,8 +1,40 @@
|
||||||
# Protect against non-zsh execution of Oh My Zsh (use POSIX syntax here)
|
# Protect against non-zsh execution of Oh My Zsh (use POSIX syntax here)
|
||||||
[ -n "$ZSH_VERSION" ] || {
|
[ -n "$ZSH_VERSION" ] || {
|
||||||
# ANSI (\033[<code>m): 0: reset, 1: bold, 4: underline, 22: no bold, 24: no underline, 31: red
|
# ANSI formatting function (\033[<code>m)
|
||||||
printf "\033[1;31mERROR:\033[22m Oh My Zsh can't be loaded from: \033[1m${0#-}\033[22m. " >&2
|
# 0: reset, 1: bold, 4: underline, 22: no bold, 24: no underline, 31: red, 33: yellow
|
||||||
printf "You need to run \033[1;4mzsh\033[22;24m instead.\033[0m\n" >&2
|
f() {
|
||||||
|
[ $# -gt 0 ] || return
|
||||||
|
IFS=";" printf "\033[%sm" $*
|
||||||
|
}
|
||||||
|
# If stdout is not a terminal ignore all formatting
|
||||||
|
[ -t 1 ] || f() { :; }
|
||||||
|
|
||||||
|
ptree() {
|
||||||
|
# Get process tree of the current process
|
||||||
|
pid=$$; pids="$pid"
|
||||||
|
while [ ${pid-0} -ne 1 ] && ppid=$(ps -e -o pid,ppid | awk "\$1 == $pid { print \$2 }"); do
|
||||||
|
pids="$pids $pid"; pid=$ppid
|
||||||
|
done
|
||||||
|
|
||||||
|
# Show process tree
|
||||||
|
case "$(uname)" in
|
||||||
|
Linux) ps -o ppid,pid,command -f -p $pids 2>/dev/null ;;
|
||||||
|
Darwin|*) ps -o ppid,pid,command -p $pids 2>/dev/null ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# If ps command failed, try Busybox ps
|
||||||
|
[ $? -eq 0 ] || ps -o ppid,pid,comm | awk "NR == 1 || index(\"$pids\", \$2) != 0"
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
shell=$(ps -o pid,comm | awk "\$1 == $$ { print \$2 }")
|
||||||
|
printf "$(f 1 31)Error:$(f 22) Oh My Zsh can't be loaded from: $(f 1)${shell}$(f 22). "
|
||||||
|
printf "You need to run $(f 1)zsh$(f 22) instead.$(f 0)\n"
|
||||||
|
printf "$(f 33)Here's the process tree:$(f 22)\n\n"
|
||||||
|
ptree
|
||||||
|
printf "$(f 0)\n"
|
||||||
|
} >&2
|
||||||
|
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user