Vai al contenuto

Zsh - Z Shell

Traduzione: Copia tutti i comandi Traduzione: Generare PDF < > Zsh (Z Shell) è un guscio esteso Unix con numerosi miglioramenti sulle conchiglie tradizionali, combinando le migliori caratteristiche di Bash, Korn shell e C shell, aggiungendo i suoi potenti miglioramenti. Creato da Paul Falstad nel 1990, Zsh è diventato sempre più popolare tra gli sviluppatori e gli utenti di potenza a causa del suo avanzato sistema di completamento, potenti capacità di globbing e ampie opzioni di personalizzazione. Serve come shell di default su macOS da Catalina e ha ottenuto l'adozione diffusa nella comunità Linux attraverso framework come Oh My Zsh. ## Installazione e configurazione ### Controllo dell'installazione Zsh Traduzione: ### Installazione di Zsh su diversi sistemi Traduzione: ### Impostare Zsh come Default Shell Traduzione: ### Configurazione iniziale Traduzione: ## Caratteristiche e sintassi Zsh-Specific ### Guanto avanzato Traduzione: ### Espansione del parametro Traduzione: ### Modifica della riga di comando Traduzione: ## Sistema di completamento avanzato ### Configurazione di completamento Traduzione: ### Complementi personalizzati Traduzione: ### Completo Debugging Traduzione: ## Opzioni Zsh e configurazione ### Opzioni Zsh essenziali Traduzione: ### Moduli Zsh Traduzione: ## Personalizzazione Prompt ### Configurazione Prompt di base # ### Caratteristiche avanzate Prompt Traduzione: # Funzione di prompt Git autocarico -Uz vcs_info Precmd() # Configurare vcs_info zstyle ':vcs_info:git: *' formati ' (%b) ' zstyle ':vcs_info:git: *' actionformats ' (%b|%a)' # Utilizzare nel prompt setops PROMPT_SUBST PS1='%n@%m:%~$\{vcs_info_msg_0_\}$ ' # Avanzato Git prompt ) se git rev-parse --git-dir > /dev/null 2>&1; allora branch locale=$(git branch --show-current 2>/dev/null) Stato locale="" # Check for uncommitted changes Se! git diff --quiet 2>/dev/null; poi # # # Check for untracked files se [ -n "$(git ls-files --others --exclude-standard 2>/dev/null)" ]; allora Traduzione: # echo " ($\{branch\}$\{status\})" # # PS1='%n@%m:%~$(git_prompt_info)$ ' Traduzione: # Aliasi globali (può essere utilizzato ovunque nella riga di comando) alias -g L='Onnipotente ' alias -g G='|grep ' alias -g H='|head ' alias -g T='|tail ' alias -g N='> /dev/null 2>&1 ' # Esempi di utilizzo ps aux G firefox # ps aux|grep firefox file cat. txt L # cat file. Traduzione: rendere N > /dev/null 2>&1 # Alias suffisso (basato sull'estensione del file) alias -s txt=vim alias -s pdf=evince alias -s \{jpg,jpeg,png,gif\}=feh alias -s \{mp4,mkv,avi\}=vlc # Utilizzo: basta digitare il nome del file document.txt # Si apre con la vim image.jpg # Si apre con feh video.mp4 # Si apre con vlc # Elenco degli alias hash -d proj=~/projects hash -d docs=~/Documents hash -d down=~/Downloads # Utilizzo cd ~proj # cd ~/projects ls ~docs # ls ~/ Documenti Traduzione: # Funzione con completamento ) mkdir -p "$1" && cd "$1" # # Aggiungere il completamento per mkcd * _files -/ # Compdef _mkcd mkcd # Funzione con gestione degli errori * se [[ $# -eq 0 ]]; allora eco "Usage: safe_rm [file2] ..." ritorno 1 # per file in "$@"; do se [[ -f "$file" ]]; allora mv "$file" ~/.trash/ eco "Moved $file to trash" Altro echo "File $file non esiste" # Fatto # # Funzione con variabili locali processo_logs() log_dir=$\{1:-/var/log\} schema locale=$\{2:-ERROR\} output_file=$\{3:-errors.txt\} trovare "$log_dir" -name "*.log" -exec grep -l "$pattern" \{\} \; > "$output_file" echo "Found $(wc -l < "$output_file") file di registro contenenti '$pattern'" # Traduzione: # Creazione di Array frutta = (uva banana arancione) numeri=(\{1..10\}) file=(*.txt) # Array accesso echo $fruits[1] # Primo elemento (1-indicizzato) echo $fruits[ -1] # Ultimo elemento echo $fruits[2,4] # Elementi 2 a 4 echo $fruits[*] # Tutti gli elementi echo $\{#fruits\} # Lunghezza della freccia # # Modifica di Array frutta+=(mango) # Elemento allegato frutti[2]=kiwi # Sostituisci elemento frutta=($\{fruits:#banana\}) # Rimuovi elementi corrispondente modello # Array slicing echo $\{fruits[2,-1]\} # Dal secondo all'ultimo elemento echo $\{fruits[1,3]\} # I primi 3 elementi # Arrapato smistamento ) # Sort ascending Invert_sorted=($\{(O)fruits\}) # Sort decrescente # Traduzione: # Declare l'array associativo typeet -A config colori -A # Populate associative array config[host]="localhost" config[port]="8080" config[user]="admin" Traduzione: [rosso]="#FF0000" [verde]=#00FF00] [blu]=#0000FF] # Accesso alla rete associativa echo $config[host] # Ottieni valore echo $\{config[port]\} # Sintassi alternativa # echo $\{(k)config\} # Get all keys echo $\{(v)config\} # Prendi tutti i valori # # Iterate su array associativo per chiave in $\{(k)config\}; do echo "$key: $config[$key]" Fatto # Controlla se esiste la chiave se (($\{+config[host]\} )); allora eco "Host è configurato" # Traduzione: # Operatori di test specifici Zsh __MKDOCS_2_ # Prova se l'opzione è impostata Test se la variabile è impostata [[ string =~ pattern ]] # Corrispondenza regolare # Modello corrispondente in condizionale caso $file in *.txt) echo "file di testo" ; *.jpg|*.png) echo "Image file" ; *) echo "Tipo di file sconosciuto" ; esaustivo # Abbinamento del modello avanzato se [[ $filename == (#i)*.pdf ]]; allora # Caso insensibile echo "file PDF" # se [[ $string == (#b)(*).(*) ]]; poi # Backreferences echo "Base: $match[1], estensione: $match[2]" # Traduzione: # Per cicli con intervalli per i eco "Numero: $i" Fatto per i in \{1..10..2\}; do Echo "Odd number: $i" Fatto # Per loop con array per file in *.txt; do eco "Processing: $file" Fatto # Mentre loop con condizioni avanzate mentre leggere -r linea; fare echo "Linea: $line" Fatto < file.tx # Fino ai loop Traduzione: fino a quando ((contro > 10 )); fare echo "Paese: $counter" ((contro++)) Fatto # Ripetere i loop (specifico Zsh) ripeti 5 eco "Ciao" # Stampa "Ciao" 5 volte ripeti $count comando # Ripeti il comando $count times Traduzione: # Gestione errori con blocco sempre . {} # Main code rischio_comand altro_comand # Sempre # {} # Cleanup code (always executed) pulizia_funzione # # Equivalente del tripudio Se! comando_that_might_fail; poi echo "Command fallito, provare alternativa" alternativa_command # # Opzioni di debug setopt XTRACE # Stampa comandi come eseguito setopt VERBOSE # Stampa linee di input come lettura setopt ERR_EXIT # Uscita sull'errore setopt ERR_RETURN # Ritorno sull'errore nelle funzioni # Debug della funzione debug_funzione() * locale -a debug_stack debug_stack=($\funcstack[@]\}) echo "Function call stack: $\{debug_stack[*]\}" # Traduzione: # Installa Oh My Zsh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" # O con wget -c "$(wget https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh_ -O -)" # Installazione manuale git clone https://github.com/ohmyzsh/ohmyzsh.git ~/.oh-my-zsh C ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc Traduzione: # ~/.zshrc configurazione per Oh My Zsh esportazione ZSH="$HOME/.oh-my-zsh" # Selezione tema # Tema di default # # Tema popolare ZSH_THEME="powerlevel10k/powerlevel10k" # Tema avanzato # Configurazione Plugin plugins=( Git. Docker Kubectl node N. Pitone Pipì Il mio amico Zsh-autosuggestione zsh-syntax-highlighting storia-sottostringa-ricerca fonte $ZSH/oh-my-zsh.sh # Configurazione personalizzata dopo Oh, mio Dio. esportazione EDITOR='vim ' esportazione PATH=$HOME/bin:/usr/local/bin:$PATH Traduzione: # Zsh-autosuggestione git clone __URL_3_ $\{ZSH_CUSTOM:-~/.oh-my-zsh/custom\}/plugins/zsh-autosuggtions # zsh-syntax-highlighting git clone __URL_4_ $\{ZSH_CUSTOM:-~/.oh-my-zsh/custom\}/plugins/zsh-syntax-highlighting # zsh-history-substring-search git clone __URL_5_ $\{ZSH_CUSTOM:-~/.oh-my-zsh/custom\}/plugins/zsh-history-substring-search # tema powerlevel10k git clone --profondità=1 __URL_6_ $\{ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom\}/themes/powerlevel10k # Configurare powerlevel10k configurazione p10k Traduzione: # Installazione prezto git clone --recursive __URL_7_ "$\{ZDOTDIR:-$HOME\}/.zprezto" setops EXTENDED_GLOB rcfile in "$\{ZDOTDIR:-$HOME\}"/.zprezto/runcoms/^README.md(.N); do Ln -s "$rcfile" "$\{ZDOTDIR:-$HOME\}/$\{rcfile:t\}" Fatto # Antibody plugin manager curl -sfL git.io/antibody|sh -s --b /usr/local/bin # ~/.zshrc con anticorpo fonte ` `` ̧(anticorpo init) anticorpo fascio zsh-users/zsh-syntax-highlighting anticorpo fascio zsh-users/zsh-autosuggestions anticorpo fascio zsh-users/zsh-completions # Zinit plugin manager -c "$(curl -fsSL https://raw.githubusercontent.com/zdharma/zinit/master/doc/install.sh_)" # ~/.zshrc con zinit fonte ~/.zinit/zinit.zsh zinit load zsh-users/zsh-syntax-highlighting zinit load zsh-users/zsh-autosuggestions zinit load zsh-users/zsh-completions Traduzione: # Profilo Zsh tempo di avvio tempo zsh -i -c uscita # Profilo dettagliato zmodload zsh/zprof # Aggiungi alla parte superiore di .zshrc, poi in basso: ? # Funzioni di carico pigre Lazy_load_nvm() {} unset -f nvm node npm esportazione NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \"$NVM_DIR/nvm.sh" [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # nvm() \\{ lazy_load_nvm; nodo() \\{ lazy_load_nvm; nodo $@\} npm()\{ lazy_load_nvm; npm $@\} Traduzione: # Ottimizzare il caricamento del completamento autocarico -Uz compilazione se [[ -n $\\{ZDOTDIR\\}/.zcompdump(#qN.mh+24) ]]; allora compilazione Altro compilazione -C # # Disattivare i passaggi lenti zstyle ':complezione: *' use-cache on zstyle ':complezione: *' percorso cache ~/.zsh/cache # Risultati di completamento del limite zstyle ': completamento: *' max-errors 2 zstyle ':completion: *:default' list-prompt '%S%M match%s ' Traduzione: # Limita la dimensione della storia Traduzione: SAVEHIST=10000 # Scarico moduli non utilizzati zmodload -u zsh/complist # Utilizzare strutture dati efficienti typeet -A hash_table # Utilizzare array associativi per cercare typeet -i integer_var # Declare integers esplicitamente Traduzione: # Struttura di configurazione modulare ~/.config/zsh/ ─ .zshrc # Configurazione principale - Alias. # Aliasi # ─ funzioni. zsh # Funzioni personalizzate ─ esportazioni. zsh # variabili ambientali - completamento. zsh # Impostazioni di completamento ─ local.zsh # Impostazioni locali/private # Moduli sorgente in .zshrc per file in ~/.config/zsh/\{exports,aliases,functions,completion\\}.zsh; do [[ -r "$file" ]] && source "$file" Fatto # Caricare la configurazione locale [[ -r ~/.config/zsh/local.zsh ]] && source ~/.config/zsh/local.zsh Traduzione: # Storia sicura Settare HIST_IGNORE_SPACE # Non salvare i comandi a partire dallo spazio alias secret=' command' # Comandi sensibili Prefix con spazio # Permessi di file sicuri arbitro 077 # autorizzazioni di default restrittive # Convalida input nelle funzioni validate_input() \\ {} input locale="$1" se [[ ! "$input" =~ ^[a-zA-Z0-9_-]+$ ]]; allora echo "Input non valido: $input" > ``&2 ritorno 1 # # Traduzione: # Controlla se si esegue Zsh se [[ -n "$ZSH_VERSION" ]]; allora # Zsh-specific code Setops AUTO_CD autoload -U compilazione > compilazione elif [[ -n "$BASH_VERSION" ]]; poi # Bash-specific code shopt -s autocd # # Funzioni portatili e) comando -v "$1" >/dev/null 2>&1 # # Utilizzare la sintassi portatile quando possibile [[ -f file ]] && echo "File esiste" # Zsh/Bash [ -f file ] && echo "File exist" # POSIX compatibile Traduzione: ### Integrazione Git in Prompt Traduzione: ## Aliasi e Funzioni ### Aliasi avanzate Traduzione: ### Funzioni avanzate Traduzione: ## Arrays e Array associati ### Operazioni Array Traduzione: ### Arrays associativi Traduzione: ## Caratteristiche di script avanzato ### Espressioni condizionali Traduzione: ### Costruzioni Loop Traduzione: ### Gestione degli errori e debug Traduzione: ## Zsh Frameworks e Plugins ### Oh My Zsh Installazione Traduzione: ### Oh My Zsh Configuration Traduzione: ### Plugin popolari Traduzione: ### Quadri alternativi Traduzione: ## Ottimizzazione delle prestazioni ### Prestazioni di avvio Traduzione: ### Performance di completamento Traduzione: ### Ottimizzazione di utilizzo della memoria Traduzione: ## Migliori Pratiche e Consigli ### Organizzazione di configurazione Traduzione: ### Considerazioni di sicurezza Traduzione: ### Compatibilità Cross-Shell Traduzione: Zsh rappresenta il pinnacolo dell'evoluzione delle conchiglie, combinando decenni di sviluppo delle conchiglie Unix con caratteristiche moderne e ampie capacità di personalizzazione. Il suo potente sistema di completamento, globbing avanzato e ricco ecosistema di temi e plugin lo rendono una scelta eccellente per gli sviluppatori e gli utenti di potenza che vogliono un ambiente di comando altamente produttivo. Se utilizzato con framework come Oh My Zsh o configurato manualmente, Zsh fornisce la flessibilità e la potenza necessaria per i flussi di lavoro sofisticati delle shell mantenendo la compatibilità con gli script e le pratiche di shell esistenti.