Gehaxelts Blog

IT-Security & Hacking

Arch: Von bash zur zsh

Ich bin vorgestern von der Bash-Shell auf die Zsh-Shell umgestiegen.

Ein kleines Tutorial gibts nun dazu, auch wenn es kinderleicht ist.

Was ist die Zsh?

Die Zsh ist eine Shell, genauso wie es die Bash (Boune Again Shell) oder die Shell selbst sind.

Nur bietet diese bessere Konfigurationsmöglichkeiten, sowie auch bessere Funktionen.

Einige Beispiele: Besseres Autocomplete, Highlighting von Eingaben, …

Zsh installieren

Dazu müsst ihr euch nur das Paket “zsh” installieren, welches das Basiskonfigurationstool mitinstalliert.

yaourt zsh

Zsh konfigurieren

Basiskonfiguration

Beim ersten Aufruf der zsh wird der Basiskonfigurationsassistent gestartet:

zsh

Bei diesem bin ich jede Option durchgegangen und habe zunächst die Defaults akzeptiert.

Dauerhaft nutzen

Möchte man die zsh dann dauerhaft nutzen, dann kann man diese zur default-Shell machen:

chsh -s $(which zsh)

Aliase & Funktionen umziehen

Möchte man ggf. angelegt aliase aus der .bashrc in die .zshrc umziehen, kann man das rel. einfach machen:

cat ~/.bashrc | grep alias >> ~/.zshrc

Für Funktionen half mir diese Zeile:

cat ~/.bashrc | grep () >> ~/.zshrc

Prompt auswählen

Es ist möglich, zwischen verschiedenen Prompts (Gestaltung der Eingabezeile) zu wählen.

Eine Übersicht bekommt man mit:

prompt -l

Eine Vorschau erhält man mit:

prompt -p

Eine Prompt wählt man mit:

prompt config

Modifizierte Clint-Prompt

Da mir die Clint-Prompt recht gut gefiel, diese aber mir zu viele Infos lieferte, habe ich sie etwas modifiziert und als myclint angelegt.

Den folgenden Source könnt ihr als

/usr/share/zsh/functions/Prompts/prompt_myclint_setup

abspeichern:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# myclint prompt theme
# modified clint prompt theme

prompt_clint_help () {
  cat <<'EOF'

  prompt myclint [<color1> [<color2> [<color3> [<color4> [<color5>]]]]]

  defaults are red, cyan, green, yellow, and white, respectively.

EOF
}

prompt_clint_setup () {
  local -a pcc
  local -A pc
  local p_date p_tty p_plat p_ver p_userpwd p_apm p_shlvlhist p_rc p_end p_win

  autoload -Uz vcs_info

  pcc[1]=${1:-${${SSH_CLIENT+'yellow'}:-'red'}}
  pcc[2]=${2:-'cyan'}
  pcc[3]=${3:-'green'}
  pcc[4]=${4:-'yellow'}
  pcc[5]=${5:-'white'}

  pc['\[']="%F{$pcc[1]}["
  pc['\]']="%F{$pcc[1]}]"
  pc['<']="%F{$pcc[1]}<"
  pc['>']="%F{$pcc[1]}>"
  pc['\(']="%F{$pcc[1]}("
  pc['\)']="%F{$pcc[1]})"

  p_date="$pc['\[']%F{$pcc[2]}%D{ %a %y/%m/%d %R %Z}$pc['\]']"
  p_tty="$pc['\[']%F{$pcc[3]}%l$pc['\]']"
  p_plat="$pc['\[']%F{$pcc[2]}${MACHTYPE}/${OSTYPE}/$(uname -r)$pc['\]']"
  p_ver="$pc['\[']%F{$pcc[2]}${ZSH_VERSION}$pc['\]']"

  [[ -n "$WINDOW" ]] && p_win="$pc['\(']%F{$pcc[4]}$WINDOW$pc['\)']"

  p_userpwd="$pc['\[']%F{$pcc[3]}%n@%m$p_win%F{$pcc[5]}:%F{$pcc[4]}%~$pc['\]']"
  p_vcs="%(2v.%U%2v%u.)"

  p_shlvlhist="%fzsh%(2L./$SHLVL.) %B%h%b "
  p_rc="%(?..[%?%1v] )"
  p_end="%f%B%#%b "

  zle_highlight[(r)default:*]=default:$pcc[2]

  prompt="$p_date$p_userpwd
$p_vcs$p_end"
  PS2='%(4_.\.)%3_> %E'

  add-zsh-hook precmd prompt_clint_precmd
}

prompt_clint_precmd () {
  setopt noxtrace noksharrays localoptions
  local exitstatus=$?
  local git_dir git_ref

  psvar=()
  [[ $exitstatus -ge 128 ]] && psvar[1]=" $signals[$exitstatus-127]" ||
  psvar[1]=""

  [[ -o interactive ]] && jobs -l

  vcs_info
  [[ -n $vcs_info_msg_0_ ]] && psvar[2]="$vcs_info_msg_0_"
}

prompt_clint_setup "$@"

Diese könnt ihr nach einem Neustart eurer Zsh mittels

prompt myclint

nutzen.

Prompt Theme dauerhaft festlegen

Um das gewählte Prompt Theme immer automatisch zu laden, kann man folgende Zeilen in die Konfiguration packen:

1
2
3
4
#Load prompt
autoload -Uz promptinit
promptinit
prompt myclint

Das Ergebnis sollte dann ungefähr so aussehen:

1
2
[Sa 13/01/12 22:07 CET][gehaxelt@LagTop:/usr/share/zsh/plugins/zsh-syntax-highlighting/highlighters/root]
% echo "Hallo Welt"

Syntaxhighlighting nutzen

Ein tolles Plugin ist das Syntaxhighlighting, welches beim Eingaben der Befehle in der Zsh Teile davon farbig hervorhebt.

Dazu installiert ihr erstmal das entsprechende Paket aus dem AUR:

yaourt zsh-syntax-highlighting

Des Weiteren gehe ich davon aus, dass sich der Highlighter in /usr/share/zsh/plugins/zsh-syntax-highlighting befindet.

Ihr müsst noch eure Konfiguration anpassen, indem ihr das anfügt:

1
2
3
4
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
ZSH_HIGHLIGHT_STYLES[globbing]='fg=yellow'
ZSH_HIGHLIGHT_STYLES[path]='bold'
ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern cursor)

Nun solltet ihr nach einem Sourcen der .zshrc mit

source ~/.zshrc

eine farbige Eingabezeile haben.

Fazit

Damit wäre für mich der Umstieg abgeschlossen.

Die nicht erwähnte Kommandokorrektur, bzw. Dateiauflistung, sowie das Highlighting sind einfach geile features.

Viel Spaß beim Nutzen der Zsh!

Gruß

gehaxelt

Linux

« RaspberryPi: Truecrypt installieren RaspberryPi: Einstieg und Möglichkeiten »