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.