Starten Sie einen ZSH-Prozess neu, ohne dass Sitzungen „verschachtelt“ sind

Starten Sie einen ZSH-Prozess neu, ohne dass Sitzungen „verschachtelt“ sind

Ich möchte meine Zsh-Sitzung neu starten, da ich eine dauerhafte Tmux-Sitzung behalte und diese ~/.zshrchäufig ändere source ~/.zshrc. Allerdings habe ich festgestellt, dass dies mit der Zeit langsamer wird (z. B. beginnt for i inSequenz 50 ; do source ~/.zshrc; echo "a"; doneschnell mit dem Drucken von „a“ und wird schnell langsamer).

Ich habe die Vorschläge hier gelesen, um zsh neu zu starten, und der Vorschlag ist, einfach zshoder auszuführen zsh -l. Wenn ich das jedoch tue, erstelle ich eine „verschachtelte“ zsh-Sitzung, wenn ich es richtig verstanden habe. Damit meine ich:

# Simulate slowed zsh session
for i in `seq 50`; do source ~/.zshrc; echo "a"; done
# use zsh to make it faster "child" zsh
zsh
# confirm fast
source ~/.zshrc; # fast
# revert back to "parent" zsh
exit
# confirm old slow session is still there
source ~/.zshrc; # slow

Ich habe eine tmux-Sitzung mit mehreren Fenstern und einem Befehlsverlauf, den ich dauerhaft speichern möchte. Deshalb suche ich nach einer nachhaltigen Lösung.

Bonus-Frage:hat irgendjemand eine Idee, warum es source ~/.zshrclangsamer werden könnte?

# Path to your oh-my-zsh installation.
export ZSH="/Users/username/.oh-my-zsh"

ZSH_THEME="themename"

# Which plugins would you like to load?
# Standard plugins can be found in ~/.oh-my-zsh/plugins/*
# Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup.
plugins=(
  git
)

source $ZSH/oh-my-zsh.sh


# activate zsh-syntax-highlighting (brew install zsh-syntax-highlighting)
source /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

function proxyON() {
...redacted
}

function proxyOFF(){
 http_proxy=
 https_proxy=
 HTTP_PROXY=
 HTTPS_PROXY=
 export http_proxy https_proxy HTTP_PROXY HTTPS_PROXY
}

function nukeDS_Store(){
 find ~/Projects/mys/ -name '.DS_Store' -delete
}

function reload-ssh() {
   ssh-add -e /Library/OpenSC/lib/opensc-pkcs11.so >> /dev/null
   if [ $? -gt 0 ]; then
       echo "Failed to remove previous card"
   fi
   ssh-add -s /Library/OpenSC/lib/opensc-pkcs11.so 
}

alias fastBuild='mvn install --offline -DskipTests=true'

## History Settings
# set history size
export HISTSIZE=1000000
#save history after logout
export SAVEHIST=1000000
##history file
export HISTFILE=~/.zhistory
##save only one command if 2 common are same and consistent
setopt HIST_IGNORE_DUPS
##add timestamp for each entry
setopt EXTENDED_HISTORY   
##have seperate history for each
setopt nosharehistory
##dont append into history file
setopt NOINC_APPEND_HISTORY


# Set java version
export JAVA_HOME=`/usr/libexec/java_home -v 1.8.0_191`


# Maven
export M3_HOME="/Applications/apache-maven-3.6.0" # replace n.n.n with appropriate version
export M3=$M3_HOME/bin
export PATH=$M3:$PATH

## set node version
export PATH="/usr/local/opt/node@8/bin:$PATH"

## pic-tools
source /Projects/pic-tools/scripts/*.env

Antwort1

Ersetzen Sie einfach die von Ihnen ausgeführte zsh-Instanz durch eine neue:

exec zsh

execist einShell integriertBefehl mit dem Zweck (siehe zshbuiltinsManpage):

Ersetzen Sie die aktuelle Shell durch einen Befehl, anstatt sie zu verzweigen.

Warum es langsamer wird... meine erste Vermutung wäre, dass Sie PATH in Ihrem neu definieren zshrc, mit vielleicht einem Verzeichnis auf einem eher langsamen Laufwerk. Jedes Mal, wenn Sie Ihr als Quelle verwenden zshrc, wird Ihr Suchpfad also immer länger. Und jedes Mal zshmüssen immer mehr Verzeichnisse neu aufbereitet werden...

Bitte lesen Sie meineAntwort auf einen anderenFrage, wie diese Situation verbessert werden kann.

verwandte Informationen