mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2026-03-11 09:05:28 +08:00
Compare commits
12 Commits
master
...
972c66325c
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
972c66325c | ||
|
|
4c7cbfeebc | ||
|
|
22017d6e7c | ||
|
|
8913f0ee55 | ||
|
|
a80c6ea4e4 | ||
|
|
274d43ce03 | ||
|
|
7ddee9740a | ||
|
|
f1935b7350 | ||
|
|
7cc5801b2b | ||
|
|
ca09c459ec | ||
|
|
00f57b9ea7 | ||
|
|
a13fdca8ac |
3
.github/CODEOWNERS
vendored
3
.github/CODEOWNERS
vendored
@@ -12,3 +12,6 @@ plugins/starship/ @axieax
|
||||
plugins/universalarchive/ @Konfekt
|
||||
plugins/wp-cli/ @joshmedeski
|
||||
plugins/zoxide/ @ajeetdsouza
|
||||
|
||||
# Core library owners
|
||||
lib/00subexecutor.zsh @pepoluan
|
||||
|
||||
34
README.md
34
README.md
@@ -44,6 +44,7 @@ To learn more, visit [ohmyz.sh](https://ohmyz.sh), follow [@ohmyzsh](https://twi
|
||||
- [Enable GNU ls In macOS And freeBSD Systems](#enable-gnu-ls-in-macos-and-freebsd-systems)
|
||||
- [Skip Aliases](#skip-aliases)
|
||||
- [Disable async git prompt](#disable-async-git-prompt)
|
||||
- [Specifying a Subexecutor](#specifying-a-subexecutor)
|
||||
- [Getting Updates](#getting-updates)
|
||||
- [Updates Verbosity](#updates-verbosity)
|
||||
- [Manual Updates](#manual-updates)
|
||||
@@ -382,6 +383,39 @@ zstyle ':omz:alpha:lib:git' async-prompt no
|
||||
> It is also not currently aware of "aliases" that are defined as functions. Example of such
|
||||
> are `gccd`, `ggf`, or `ggl` functions from the git plugin.
|
||||
|
||||
|
||||
### Specifying a Subexecutor
|
||||
|
||||
A ***subexecutor*** is a tool that can execute other programs as if running using a different user, usually as `EUID=0` (`root`).
|
||||
|
||||
The most well-known subexecutor is probably the `sudo` tool; however, `sudo` is not the only subexecutor tool available. In addition, `sudo` is only available for the Gnu/Linux operating system.
|
||||
|
||||
Users of *BSD operating systems usually just use either the `su` tool or the `doas` tool; the latter is now also available for Gnu/Linux through the [OpenDoas](https://github.com/Duncaen/OpenDoas) package.
|
||||
|
||||
By default, Oh My Zsh will try to automatically detect which subexecutor is in use (prioritizing detection of `doas` over `sudo`). However, you can explicitly specify which subexecutor you want to use using the following:
|
||||
|
||||
```sh
|
||||
zstyle ':omz' subexecutor $SUBEXECUTOR
|
||||
|
||||
# For example, if you want to use sudo as the subexecutor regardless of the result of detection, specify:
|
||||
zstyle ':omz' subexecutor sudo
|
||||
```
|
||||
|
||||
To allow flexibility/transparency, a function `subex` is provided. With this function, you can invoke the subexecutor without needing to know which subexecutor is available on the system; this will be very helpful for instance if you are writing plugins for Oh My Zsh.
|
||||
|
||||
```sh
|
||||
# Example of editing a root-only-editable file
|
||||
subex vim /etc/hosts
|
||||
|
||||
# Example of creating a new user
|
||||
subex useradd -m -s $(which zsh) user2
|
||||
```
|
||||
|
||||
Do note that the `subex` function is a thin wrapper around the subexecutor: it passes all arguments to the subexecutor without any processing; it is not meant to be a compatibility thunking layer between the various subexecutor tools available. Care must still be taken if you need to use subexecutor-specific options because what's available for one subexecutor might not be available for the other subexecutors.
|
||||
|
||||
The `subex` function dynamically adjusts to in-session changes of `zstyle ':omz' subexecutor` value.
|
||||
|
||||
|
||||
## Getting Updates
|
||||
|
||||
By default, you will be prompted to check for updates every 2 weeks. You can choose other update modes by adding a line to your `~/.zshrc` file, **before Oh My Zsh is loaded**:
|
||||
|
||||
44
lib/00subexecutor.zsh
Normal file
44
lib/00subexecutor.zsh
Normal file
@@ -0,0 +1,44 @@
|
||||
## Provides auto-detection of subexecutor to use
|
||||
|
||||
# If in the future a new subexecuter is created, we only need to edit this array
|
||||
typeset _KNOWN_SUBEXES=( "doas" "sudo" )
|
||||
typeset _SUBEX
|
||||
|
||||
function _SetupSubexecutor() {
|
||||
local _i
|
||||
local _cmd
|
||||
zstyle -s ':omz' 'subexecutor' _SUBEX
|
||||
if [[ "$_SUBEX" ]]; then
|
||||
if command -v "$_SUBEX" > /dev/null; then
|
||||
return 0
|
||||
fi
|
||||
print "Cannot find subexecutor '${_SUBEX}'; please check your configuration!" >&2
|
||||
return 1
|
||||
fi
|
||||
for _i in "${_KNOWN_SUBEXES[@]}"; do
|
||||
if command -v "$_i" > /dev/null; then
|
||||
_SUBEX="$_i"
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [[ -z $_SUBEX ]]; then
|
||||
print "oh-my-zsh: cannot auto-detect subexecutor; please specify explicitly using 'zstyle :omz subexecutor'." >&2
|
||||
return 1
|
||||
fi
|
||||
zstyle ':omz' 'subexecutor' "$_SUBEX"
|
||||
}
|
||||
|
||||
_SetupSubexecutor
|
||||
unfunction _SetupSubexecutor
|
||||
unset _KNOWN_SUBEXES
|
||||
|
||||
# The alias provides a 'hardcoded', invariant subexecutor to use throughout the shell session
|
||||
alias _="$_SUBEX "
|
||||
|
||||
# The function is, in contrast, modifiable by changing the :omz->subexecutor zstyle
|
||||
function subex() {
|
||||
local _subex
|
||||
zstyle -s ':omz' 'subexecutor' _subex
|
||||
${_subex} "$@"
|
||||
}
|
||||
|
||||
@@ -3,8 +3,12 @@ if [[ "$ENABLE_CORRECTION" == "true" ]]; then
|
||||
alias man='nocorrect man'
|
||||
alias mkdir='nocorrect mkdir'
|
||||
alias mv='nocorrect mv'
|
||||
alias sudo='nocorrect sudo'
|
||||
alias su='nocorrect su'
|
||||
|
||||
zstyle -s ':omz' 'subexecutor' _subex
|
||||
alias "$_subex"="nocorrect $_subex"
|
||||
unset _subex
|
||||
alias subex='nocorrect subex'
|
||||
|
||||
setopt correct_all
|
||||
fi
|
||||
|
||||
@@ -27,9 +27,6 @@ elif (( ${+commands[more]} )); then
|
||||
env_default 'PAGER' 'more'
|
||||
fi
|
||||
|
||||
## super user alias
|
||||
alias _='sudo '
|
||||
|
||||
## more intelligent acking for ubuntu users and no alias for users without ack
|
||||
if (( $+commands[ack-grep] )); then
|
||||
alias afind='ack-grep -il'
|
||||
|
||||
@@ -95,8 +95,10 @@ function omz_termsupport_preexec {
|
||||
fi
|
||||
fi
|
||||
|
||||
# cmd name only, or if this is sudo or ssh, the next cmd
|
||||
local CMD="${1[(wr)^(*=*|sudo|ssh|mosh|rake|-*)]:gs/%/%%}"
|
||||
# cmd name only, or if this is doas/sudo or ssh, the next cmd
|
||||
local _subex
|
||||
zstyle -s ':omz' 'subexecutor' _subex
|
||||
local CMD="${1[(wr)^(*=*|${_subex}|_|subex|ssh|mosh|rake|-*)]:gs/%/%%}"
|
||||
local LINE="${2:gs/%/%%}"
|
||||
|
||||
title "$CMD" "%100>...>${LINE}%<<"
|
||||
|
||||
Reference in New Issue
Block a user