View previous topic :: View next topic |
Author |
Message |
haukew Tux's lil' helper
Joined: 01 Dec 2006 Posts: 135 Location: Hamburg - Germany
|
Posted: Wed Aug 22, 2007 5:05 pm Post subject: [SOLVED]Gentoo-Standard- ~/.bashrc |
|
|
Moin!
Durch eine Verkettung blöder Umstände ist mir meine bashrc abhanden gekommen - könnte vielleicht jemand die Gentoo-Standard-bashrc posten (besonders die Farbkodierung für root etc. finde ich allerliebst)
Gruß und danke im Voraus, Hauke _________________ http://www.MySpace.com/TheAgeOfSound - my band
Last edited by haukew on Tue Sep 04, 2007 11:50 pm; edited 1 time in total |
|
Back to top |
|
|
manuels Advocate
Joined: 22 Nov 2003 Posts: 2146 Location: Europe
|
|
Back to top |
|
|
dek l33t
Joined: 16 May 2002 Posts: 657 Location: Germany
|
Posted: Wed Aug 22, 2007 6:40 pm Post subject: |
|
|
Die Farben werden eigentlich in der /etc/bash/bashrc gesetzt (PS1).
Edit:
Macht die default .bashrc in /etc/skel überhaupt was?
Code: |
if [[ $- != *i* ]] ; then
# Shell is non-interactive. Be done now!
return
fi
|
|
|
Back to top |
|
|
smg Veteran
Joined: 13 Aug 2004 Posts: 1402 Location: /home/stephan
|
Posted: Thu Aug 23, 2007 10:48 am Post subject: |
|
|
Klar, da steht ja noch mehr drin als das, oder? _________________ GnuPG-Key-ID: 0xF8C275D4
Fingerprint: 5B6F 134A 189B A24D 342B 0961 8D4B 0230 F8C2 75D4
Code: | perl -WTe '($")=$/;print qq(@{[reverse('0'..'100')]}$/BOOM!$/);' |
|
|
Back to top |
|
|
dek l33t
Joined: 16 May 2002 Posts: 657 Location: Germany
|
Posted: Thu Aug 23, 2007 11:31 am Post subject: |
|
|
smg wrote: | Klar, da steht ja noch mehr drin als das, oder? |
Schon, aber der Rest sind halt nur Kommentare. |
|
Back to top |
|
|
smg Veteran
Joined: 13 Aug 2004 Posts: 1402 Location: /home/stephan
|
Posted: Thu Aug 23, 2007 12:04 pm Post subject: |
|
|
Code: | stephan@unimatrix ~ :) $ cat /etc/skel/.bashrc
# /etc/skel/.bashrc
#
# This file is sourced by all *interactive* bash shells on startup,
# including some apparently interactive shells such as scp and rcp
# that can't tolerate any output. So make sure this doesn't display
# anything or bad things will happen !
# Test for an interactive shell. There is no need to set anything
# past this point for scp and rcp, and it's important to refrain from
# outputting anything in those cases.
if [[ $- != *i* ]] ; then
# Shell is non-interactive. Be done now!
return
fi
# Enable colors for ls, etc. Prefer ~/.dir_colors #64489
if [[ -f ~/.dir_colors ]] ; then
eval $(dircolors -b ~/.dir_colors)
elif [[ -f /etc/DIR_COLORS ]] ; then
eval $(dircolors -b /etc/DIR_COLORS)
fi
alias ls='ls --color=auto'
alias grep='grep --colour=auto'
# Change the window title of X terminals
case ${TERM} in
xterm*|rxvt*|Eterm|aterm|kterm|gnome)
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007"'
;;
screen)
PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\033\\"'
;;
esac
|
_________________ GnuPG-Key-ID: 0xF8C275D4
Fingerprint: 5B6F 134A 189B A24D 342B 0961 8D4B 0230 F8C2 75D4
Code: | perl -WTe '($")=$/;print qq(@{[reverse('0'..'100')]}$/BOOM!$/);' |
|
|
Back to top |
|
|
dek l33t
Joined: 16 May 2002 Posts: 657 Location: Germany
|
Posted: Thu Aug 23, 2007 12:31 pm Post subject: |
|
|
Code: |
$ cat /etc/skel/.bashrc
# /etc/skel/.bashrc
#
# This file is sourced by all *interactive* bash shells on startup,
# including some apparently interactive shells such as scp and rcp
# that can't tolerate any output. So make sure this doesn't display
# anything or bad things will happen !
# Test for an interactive shell. There is no need to set anything
# past this point for scp and rcp, and it's important to refrain from
# outputting anything in those cases.
if [[ $- != *i* ]] ; then
# Shell is non-interactive. Be done now!
return
fi
# Put your fun stuff here.
|
Oooook, einer von uns beiden hat eine veraltete Version. |
|
Back to top |
|
|
Max Steel Advocate
Joined: 12 Feb 2007 Posts: 2272 Location: My own world! I and Gentoo!
|
Posted: Thu Aug 23, 2007 12:44 pm Post subject: |
|
|
Falls ihr eine dritte Stimme braucht:
Code: | # /etc/skel/.bashrc
#
# This file is sourced by all *interactive* bash shells on startup,
# including some apparently interactive shells such as scp and rcp
# that can't tolerate any output. So make sure this doesn't display
# anything or bad things will happen !
# Test for an interactive shell. There is no need to set anything
# past this point for scp and rcp, and it's important to refrain from
# outputting anything in those cases.
if [[ $- != *i* ]] ; then
# Shell is non-interactive. Be done now!
return
fi
# Put your fun stuff here. |
Und die hier is in /home/user/
Code: | # /etc/skel/.bashrc:
#
# This file is sourced by all *interactive* bash shells on startup,
# including some apparently interactive shells such as scp and rcp
# that can't tolerate any output. So make sure this doesn't display
# anything or bad things will happen !
# Test for an interactive shell. There is no need to set anything
# past this point for scp and rcp, and it's important to refrain from
# outputting anything in those cases.
if [[ $- != *i* ]] ; then
# Shell is non-interactive. Be done now!
return
fi
# Enable colors for ls, etc. Prefer ~/.dir_colors #64489
if [[ -f ~/.dir_colors ]]; then
eval `dircolors -b ~/.dir_colors`
else
eval `dircolors -b /etc/DIR_COLORS`
fi
# Change the window title of X terminals
case ${TERM} in
xterm*|rxvt*|Eterm|aterm|kterm|gnome)
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007"'
;;
screen)
PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\033\\"'
;;
esac
shopt -s histappend
PROMPT_COMMAND='history -a' |
_________________ mfg
Steel
___________________
Heim-PC: AMD Ryzen 5950X, 64GB RAM, GTX 1080
Laptop: Intel Core i5-4300U, 16GB RAM, Intel Graphic
Arbeit-PC: Intel i5-1145G7, 16GB RAM, Intel Iris Xe Graphic (leider WSL2) |
|
Back to top |
|
|
Polynomial-C Retired Dev
Joined: 01 Jun 2003 Posts: 1432 Location: Germany
|
Posted: Thu Aug 23, 2007 12:57 pm Post subject: |
|
|
Hi,
die aktuellste .bashrc findet man immer hier (vorausgesetzt, man hat keinen uralten portage-tree ): /usr/portage/app-shells/bash/files/dot-bashrc
Grüße
Poly-C _________________ The manual said "Requires Windows10 or better" so I installed GNU/Linux...
my portage overlay
Need a stage1 tarball? (Unofficial builds) |
|
Back to top |
|
|
haukew Tux's lil' helper
Joined: 01 Dec 2006 Posts: 135 Location: Hamburg - Germany
|
Posted: Tue Sep 04, 2007 11:50 pm Post subject: |
|
|
danke für Eure Antworten
Die "Verkettung blöder Umstände" war übrigens, dass ich mir zum Ausprobieren Arch installiert hatte (ohne natürlich ein Backup von Gentoo zu machen...)
Naja, hab's denn schnell wieder sein lassen und bin wieder zurück bei Mama Gentoo _________________ http://www.MySpace.com/TheAgeOfSound - my band |
|
Back to top |
|
|
ok Guru
Joined: 11 Jul 2006 Posts: 390 Location: germany
|
Posted: Wed Sep 05, 2007 4:30 pm Post subject: |
|
|
Code: | # Change the window title of X terminals
case ${TERM} in
xterm*|rxvt*|Eterm|aterm|kterm|gnome)
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007"'
;;
screen)
PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\033\\"'
;;
esac |
Diese Zeilen haben mich mal ziemlich viel Zeit gekostet, als ich den Titel meines xterm-windows ändern wollte.
Dachte schon ich war so "blöd" die Zeilen auszuprobieren und wieder zu vergessen...
Aber ein PROMPT_COMMAND=... sollte meiner Meinung nach nicht als Standard in eine bashrc. |
|
Back to top |
|
|
mv Watchman
Joined: 20 Apr 2005 Posts: 6780
|
Posted: Wed Sep 05, 2007 5:25 pm Post subject: |
|
|
dek wrote: | Oooook, einer von uns beiden hat eine veraltete Version. :) |
Vermutlich hast Du die neuere, da das meiste bereits in /etc/bash/bashrc enthalten ist und daher nicht "doppelt" auch noch in ~/.bashrc zu sein braucht - ist vor einiger Zeit als Bug gemeldet worden. @MaxSteel: Natürlich wird die ~/.bashrc bei einem Update nicht automatisch von /etc/skel übernommen. |
|
Back to top |
|
|
mv Watchman
Joined: 20 Apr 2005 Posts: 6780
|
Posted: Wed Sep 05, 2007 5:26 pm Post subject: |
|
|
ok wrote: | Aber ein PROMPT_COMMAND=... sollte meiner Meinung nach nicht als Standard in eine bashrc. |
Zumal es ja ein PS1=$(...) ebenso tut |
|
Back to top |
|
|
Necoro Veteran
Joined: 18 Dec 2005 Posts: 1912 Location: Germany
|
Posted: Wed Sep 05, 2007 6:10 pm Post subject: |
|
|
mv wrote: | ok wrote: | Aber ein PROMPT_COMMAND=... sollte meiner Meinung nach nicht als Standard in eine bashrc. |
Zumal es ja ein PS1=$(...) ebenso tut |
Das ist nicht korrekt. Das PROMPT_COMMAND wird jedes mal neu ausgeführt. Bei PS1=$(...) wird der Befehl nur einmal ausgeführt (nämlich wenn die Variable belegt wird) - und erzielt damit nicht das korrekte ergebnis. (in dem Fall hier schon, wenn man die Prompt-Platzhalter (%h, %u, etc) benutzt) _________________ Inter Deum Et Diabolum Semper Musica Est. |
|
Back to top |
|
|
mv Watchman
Joined: 20 Apr 2005 Posts: 6780
|
Posted: Wed Sep 05, 2007 7:41 pm Post subject: |
|
|
Necoro wrote: | mv wrote: | Zumal es ja ein PS1=$(...) ebenso tut |
Das ist nicht korrekt. |
Ja, war ein Typo: Es hätte PS1='$(...)' heißen müssen. |
|
Back to top |
|
|
Necoro Veteran
Joined: 18 Dec 2005 Posts: 1912 Location: Germany
|
Posted: Wed Sep 05, 2007 9:09 pm Post subject: |
|
|
Ich sehe gerade - auch das wäre nicht das gleiche ...
PROMPT_COMMAND führt nur ein Kommando aus (das was dort gegeben ist ändert den Titel vom xterm). PS1 aber setzt den Prompt. Wenn du das dortige als '$(..)' fürs PS1 setzt, hast du keinen Prompt mehr
mal ein Beispiel
Code: | necoro@Devoty ~ $ PROMPT_COMMAND="echo hallo"
hallo
necoro@Devoty ~ $ echo muh
muh
hallo
necoro@Devoty ~ $ cd ..
hallo
necoro@Devoty home $ unset PROMPT_COMMAND
necoro@Devoty home $ PS1='$(echo "hallo $PWD ")'
hallo /home cd necoro
hallo /home/necoro |
_________________ Inter Deum Et Diabolum Semper Musica Est. |
|
Back to top |
|
|
ok Guru
Joined: 11 Jul 2006 Posts: 390 Location: germany
|
Posted: Thu Sep 06, 2007 10:18 am Post subject: |
|
|
Code: | PS1='$(echo -ne "\033]0;Mein Titel\007")'$PS1 | ! |
|
Back to top |
|
|
mv Watchman
Joined: 20 Apr 2005 Posts: 6780
|
Posted: Thu Sep 06, 2007 3:53 pm Post subject: |
|
|
Damit's nicht langweilig wird, hier mal die von mir benutzte Funktion zum Setzen des Promptes - "set_prompt -h" zeigt die Optionen. Der Prompt zeigt Benutzer- und Rechnernamen und die Distribution (DISTRITEXT muss entsprechend gesetzt sein; um mit chroot richtig umgehen zu können, sollte die "originale" Distribution in DISTRITEXTSAVE stehen), wobei die jeweiligen Farben bei "root"/*www*/<500-Usern bzw. bei chroot bzw. mit ssh anders sind. Außerdem wird der aktuelle Pfadname angezeigt, der mit (andersfarbigen) "..." in der Mitte versehen wird, falls er zu lang ist.
Der Hauptvorteil, dabei nicht PROMPT_COMMAND zu benutzen, ist, dass man letzteres immer noch zur Verfügung hat, wenn man will.
Code: | ESCAPE=$'\e'
BLACK="${ESCAPE}[0;30m"
BLUE="${ESCAPE}[0;34m"
GREEN="${ESCAPE}[0;32m"
CYAN="${ESCAPE}[0;36m"
RED="${ESCAPE}[0;31m"
PURPLE="${ESCAPE}[0;35m"
BROWN="${ESCAPE}[0;33m"
LIGHT_GRAY="${ESCAPE}[0;37m"
DARK_GRAY="${ESCAPE}[1;30m"
LIGHTBLUE="${ESCAPE}[1;34m"
LIGHTGREEN="${ESCAPE}[1;32m"
LIGHTCYAN="${ESCAPE}[1;36m"
LIGHTRED="${ESCAPE}[1;31m"
LIGHTPURPLE="${ESCAPE}[1;35m"
YELLOW="${ESCAPE}[1;33m"
WHITE="${ESCAPE}[1;37m"
NORMCOL="${ESCAPE}[0m"
set_prompt() {
local STATUS='' DISTRI='' SEP=':' PLAIN PLAINC DIR DIRC
local STARTXSTATUS="${ESCAPE}]0;"
local ENDXSTATUS=$'\007'
local STARTSSTATUS="${ESCAPE}k"
local ENDSSTATUS="${ESCAPE}"'\\'
local C_USR='' C_AT='' C_HST='' C_DIR='' C_DT='' C_HSH='' C_SEP='' C_END=''
local H_USR='' H_AT='' H_HST='' H_DIR='' H_DT='' H_HSH='' H_SEP='' H_END=''
local C_EXT='' C_EXS=''
local H_EXT='' H_EXS=''
local EXT='' PEXT='' PCEXT='' DOTS PDOTS
local COLOR=: SCREEN=: XTERM=: CUT=: ZSH=false EX=false
local OPEN='\[' CLOSE='\]' EDIR='\w' EUSER='\u' EHST='\h' EPROMPT='\$'
local D1 D2 D3 ARG
local OPTIND=1
while getopts 'CSXle?hH' ARG
do case "${ARG}" in
C) COLOR=false;;
S) SCREEN=false;;
X) XTERM=false;;
l) CUT=false;;
e) EX=:;;
*) echo "Usage: set_prompt [options]
-C No colorized prompt
-S No screen hardstatus
-X No xterm hardstatus
-l Long path (i.e. no path shortening)
-e Extended prompt"
return 1;;
esac
done
if [ -n "${DISTRITEXT}" ]
then DISTRI="(${DISTRITEXT})"
SEP="${DISTRI}"
fi
[ -z "${BASH}" ] && ZSH=:
if ${ZSH}
then OPEN='%{'; CLOSE='%}'; EDIR='%~' EUSER='%n'; EHST='%m'
EPROMPT='%(!.&.%%)'; ENDSSTATUS="${ESCAPE}"'\'
fi
if ${COLOR}
then [ -n "${UID}" ] || UID="$(id -u)"
[ -n "${GID}" ] || GID="$(id -g)"
C_AT="${CYAN}"
C_HST="${GREEN}"
C_DIR="${LIGHTGREEN}"
C_DT="${BLUE}"
C_HSH="${YELLOW}"
C_SEP="${CYAN}"
C_END="${NORMCOL}"
C_EXT="${LIGHTRED}"
C_EXS="${BROWN}"
[ -n "${SSH_TTY}${SSH_CONNECTION}" ] && C_HST="${LIGHTRED}"
[ "${DISTRITEXTSAVE}" != "${DISTRITEXT}" ] && C_SEP="${RED}"
case "${USER}" in
*www*) C_USR="${LIGHTBLUE}";;
*) C_USR="${BROWN}";;
esac
if [ "${UID}" -lt 500 ] || [ "${GID}" -lt 500 ]
then C_USR="${LIGHTCYAN}"
C_HSH="${LIGHTRED}"
fi
[ -n "${C_USR}" ] && H_USR="${OPEN}${C_USR}${CLOSE}"
[ -n "${C_AT}" ] && H_AT="${OPEN}${C_AT}${CLOSE}"
[ -n "${C_HST}" ] && H_HST="${OPEN}${C_HST}${CLOSE}"
[ -n "${C_DIR}" ] && H_DIR="${OPEN}${C_DIR}${CLOSE}"
[ -n "${C_DT}" ] && H_DT="${OPEN}${C_DT}${CLOSE}"
[ -n "${C_HSH}" ] && H_HSH="${OPEN}${C_HSH}${CLOSE}"
[ -n "${C_SEP}" ] && H_SEP="${OPEN}${C_SEP}${CLOSE}"
[ -n "${C_END}" ] && H_END="${OPEN}${C_END}${CLOSE}"
[ -n "${C_EXT}" ] && H_EXT="${OPEN}${C_EXT}${CLOSE}"
[ -n "${C_EXS}" ] && H_EXS="${OPEN}${C_EXS}${CLOSE}"
fi
if ${EX} && ${ZSH}
then PEXT='%(?..:%?)'
PCEXT='%(?.. %?)'
EXT="%(?..${H_EXS}(${H_EXT}%?${H_EXS}%))"
fi
if ${CUT}
then DIR='${D}'
DIRC='${C}'
else DIR="${EDIR}"
DIRC="${DIR}"
fi
PLAIN="${EUSER}@${EHST}${DISTRI} ${DIR}${PEXT}"
PLAINC="${EUSER}@${EHST}${DISTRI}:${DIR}${PCEXT}"
${SCREEN} && case "${TERM}" in
screen*) STATUS="${STARTSSTATUS}${PLAINC}${ENDSSTATUS}";;
esac
${XTERM} && case "${TERM}" in
xterm*|screen*) STATUS="${STATUS}${STARTXSTATUS}${PLAIN}${ENDXSTATUS}";;
esac
if [ -n "${STATUS}" ]
then PS1="${OPEN}${STATUS}${C_USR}${CLOSE}"
else PS1="${H_USR}"
fi
PS1="${PS1}${EUSER}${H_AT}@${H_HST}${EHST}${H_SEP}${SEP}${H_DIR}"
PS1="${PS1}${DIRC}${EXT}${H_HSH}${EPROMPT} ${H_END}"
if ${CUT}
then PDOTS='...'
DOTS="${H_DT}${PDOTS}${H_DIR}"
if ${ZSH}
then D1='D="$(print -P "%~")"'
D2='"${D[0,8]}'
D3='${D[${#D}-15,${#D}]}"'
else D1='D="${PWD#~}"; [ "${D}" = "${PWD}" ] || D="~${D}"'
D2='${D:0:8}'
D3='${D: -16}'
fi
D2='"${D/????????????????????????????*/'"${D2}"; D3="${D3}"'}"'
PS1="\"${PS1}\""
PS1="\$(${D1}; C=${D2}${DOTS}${D3}; D=${D2}${PDOTS}${D3}; echo ${PS1})"
fi
}
if [ -n "${BASH}" ] && \
[ "${BASH_VERSINFO[0]}" -eq 3 ] && [ "${BASH_VERSINFO[1]}" -eq 1 ] && \
[ "${BASH_VERSINFO[2]}" -le 17 ] && [ "${BASH_VERSINFO[3]}" -le 1 ]
then set_prompt -l
# Prompt expansion is buggy in these bash releases - example to test:
#PS1='$(echo "Strange \[\e[0;32m\]Prompt\[\e[0m\] ")'
else set_prompt
fi |
Edit: Einige Bugfixes und (mittlerweile volle) zsh-Kompatibilität (s. Diskussion weiter unten). Für zsh ist zu beachten, dass Code: | setopt prompt_subst | zu setzen ist, und dass das File mit der Funktion mit
Code: | bash_source() {
emulate -L sh
setopt kshglob noshglob braceexpand
source "$@"
} |
eingesourced werden sollte (so kann das selbe File für bash und zsh benutzt werden).
Last edited by mv on Tue Aug 17, 2010 6:54 pm; edited 8 times in total |
|
Back to top |
|
|
Necoro Veteran
Joined: 18 Dec 2005 Posts: 1912 Location: Germany
|
Posted: Thu Sep 06, 2007 4:42 pm Post subject: |
|
|
/me votes for Prompts in zsh _________________ Inter Deum Et Diabolum Semper Musica Est. |
|
Back to top |
|
|
mv Watchman
Joined: 20 Apr 2005 Posts: 6780
|
Posted: Fri Sep 14, 2007 8:08 pm Post subject: |
|
|
Necoro wrote: | /me votes for Prompts in zsh ;) |
Bisher hat mich von anderen Shells grundsätzlich abgeschreckt, dass man sowieso eine bash im Speicher haben sollte, weil sehr vieles sie benutzt - also wieso Platz und (wiederholte) Ladezeit mit einer weiteren Shell verschwenden?
Im Zuge der Umstellung auf dash, mit der man halt doch schneller bootet, habe ich mir jetzt allerdings die zsh nochmal angeschaut:
Immerhin habe ich meine bash-startup-Files mit einigen Änderungen (zsh kennt z.B. kein [[ "$VARIABLE" ]] und kein ${VARIABLE:0:1}) jetzt auch unter der zsh zum Laufen gebracht; u.a. auch die obige Funktion, die ich jetzt entsprechend editiert habe.
Leider kann ich nicht bestätigen, dass zsh-Prompts bequemer sind: Ich fand keine Möglichkeit die obige Funktion für die zsh einfacher zu gestalten. Schlimmer noch, unter der zsh muss die Option -l zwangsobtruiert werden:
Das "Abschneiden" langer Namen scheint mit der zsh nicht machbar zu sein, weil ein PS1="$(...)" dort eben nur die Ausgabe $(...) ergibt und nicht ausgeführt wird; mit den Conditionals der zsh scheint man das nicht hinzukommen. Aber ich habe natürlich gerade erst angefangen, mir die zsh anzuschauen und lasse mich gerne eines besseren belehren... |
|
Back to top |
|
|
Necoro Veteran
Joined: 18 Dec 2005 Posts: 1912 Location: Germany
|
Posted: Fri Sep 14, 2007 10:15 pm Post subject: |
|
|
mv wrote: | Immerhin habe ich meine bash-startup-Files mit einigen Änderungen (zsh kennt z.B. kein [[ "$VARIABLE" ]] und kein ${VARIABLE:0:1}) jetzt auch unter der zsh zum Laufen gebracht |
Das erste wäre im zsh stil: [[ -n "$VARIABLE" ]] --- für das zweite - keine Ahnung
Ansonsten - zu deinen Problemen. Ich hab keine Ahnung - hab mir dein PS1=$(...) funktions holocaust da oben aber auch net näher zu gemüte geführt ^^ ... - empfehle dir mal das hier: http://zsh.dotsrc.org/Guide/zshguide.html ...
Prinzipiell gilt: Die zsh hat für alles irgendwo eine Option - man muss sie nur finden ^^ _________________ Inter Deum Et Diabolum Semper Musica Est. |
|
Back to top |
|
|
mv Watchman
Joined: 20 Apr 2005 Posts: 6780
|
Posted: Sat Sep 15, 2007 12:25 pm Post subject: |
|
|
Necoro wrote: | mv wrote: | Immerhin habe ich meine bash-startup-Files mit einigen Änderungen (zsh kennt z.B. kein [[ "$VARIABLE" ]] und kein ${VARIABLE:0:1}) jetzt auch unter der zsh zum Laufen gebracht |
Das erste wäre im zsh stil: [[ -n "$VARIABLE" ]] --- für das zweite - keine Ahnung ;) |
Das herauszufinden, war nicht das Problem. Das Problem ist, dass die zsh das [[ $VARIABLE ]] auch im Kompatibilitätsmodus nicht schluckt, sondern Syntaxfehler bringt und das Einlesen/Ausführen der Files abbricht. Daher kann man die wirklich gute /etc/bash_completion sowie einige Files in /etc/bash_completion.d nicht ohne vorheriges Umschreiben einiger Stellen nutzen. Dies wiederum wird natürlich bei upgrades dieser Files Probleme machen. Und wer will schon eine Shell ohne vernünftig vordefinierte Completions nutzen, wenn man dies bei der Bash haben kann?
Quote: | hab mir dein PS1=$(...) funktions holocaust da oben aber auch net näher zu gemüte geführt. [...] Die zsh hat für alles irgendwo eine Option |
Ja, ich sollte vielleicht mit Worten erklären, was das PS1-Problem so komplex macht:
Ziel ist es, sowohl den sichtbaren Prompt zu setzen als auch ggf. den Prompttext als "hardstatus"-line sowie als "xterm title" durchzureichen - ersteres mit verschiedenen Farben, die letzten beiden ohne Farben.
Als zusätzliches Schmankerl möchte ich mit PS1=$(...) dabei erreichen, dass lange Directorynamen gekürzt werden. Also anstelle von '/usr/share/doc/xf86-input-keyboard-1.1.1' soll im Prompt nur noch '/usr/sha...t-keyboard-1.1.1' erscheinen, wobei die '...' in einer anderen Farbe sein sollen (die Farben natürlich wieder nur im Prompt, nicht im durchgereichten "hardstatus"/"xterm title").
Wenn Du eine Möglichkeit siehst, das in zsh zu machen... |
|
Back to top |
|
|
Necoro Veteran
Joined: 18 Dec 2005 Posts: 1912 Location: Germany
|
Posted: Sat Sep 15, 2007 6:18 pm Post subject: |
|
|
mv wrote: | Daher kann man die wirklich gute /etc/bash_completion sowie einige Files in /etc/bash_completion.d nicht ohne vorheriges Umschreiben einiger Stellen nutzen. Dies wiederum wird natürlich bei upgrades dieser Files Probleme machen. Und wer will schon eine Shell ohne vernünftig vordefinierte Completions nutzen, wenn man dies bei der Bash haben kann? |
Ich kenn die Completions bei der Bash nicht - aber ich weiß, dass ich damals zur zsh gewechselt bin, weil es gerade dort welche gibt -- tipp: ignorier die bashcompletion und nimm die von zsh -->
emerge -av zsh-completion <--- das bringt dir completion für "equery", "emerge" etc
und in deine ~/.zshrc schreibst du
Code: | autoload -U compinit
compinit |
Zu deinem PS1 Problem -> man zshmisc -Sektion "PROMPT EXPANSION" (ist die letzte in der Page) _________________ Inter Deum Et Diabolum Semper Musica Est. |
|
Back to top |
|
|
mv Watchman
Joined: 20 Apr 2005 Posts: 6780
|
Posted: Sat Sep 15, 2007 7:50 pm Post subject: |
|
|
Necoro wrote: | mv wrote: | Und wer will schon eine Shell ohne vernünftig vordefinierte Completions nutzen, wenn man dies bei der Bash haben kann? |
Ich kenn die Completions bei der Bash nicht - aber ich weiß, dass ich damals zur zsh gewechselt bin, weil es gerade dort welche gibt -- tipp: ignorier die bashcompletion und nimm die von zsh -->
emerge -av zsh-completion <--- das bringt dir completion für "equery", "emerge" etc |
Ich sprach von vordefinierten completions. Die zsh-completion hat halt nur ein paar für die Gentoo-Utilities, während app-shells/bash-completion Completions für hunderte von Kommandos hat und z.B. die Optionen und Extensions für spezielle Programme wie mplayer immer wieder aktualisiert werden. Das möchte ich wirklich nicht von Hand für jedes Programm in der zsh nachbauen und ständig aktualisieren. Klar, das erste, was ich in zshrc gemacht hatte, war (in Abwandlung einer FAQ)
Code: | bash_source() {
emulate -L sh
local -a BASH_VERSINFO
BASH_VERSINFO=( 3 2 17 1 release )
alias shopt=':'
alias readonly=':'
alias _expand=_bash_expand
alias _complete=_bash_comp
have(){}
alias have=zsh_have
setopt kshglob noshglob braceexpand
source "$@"
}
zsh_have() {
unset have
(( ${+commands[$1]} )) && have=yes
}
alias have=zsh_have
autoload -U compinit bashcompinit
compinit -D
bash_source /etc/bash_completion |
aber leider führt der [[ $VARIABLE ]]-Ärger dazu, dass bash_completion nicht richtig abgearbeitet wird und nur Murks definiert wird, wenn man die entsprechenden Zeilen nicht patcht.
Quote: | Zu deinem PS1 Problem -> man zshmisc -Sektion "PROMPT EXPANSION" (ist die letzte in der Page) |
Das hatte ich mir schon angeschaut, aber leider kann man beim "Kürzen" eben nur einen konstanten String angeben - jedes "%" im "Ersetzungsstring" wird als solches gedruckt statt interpretiert. Dadurch kann man die Filenamen nur an einer Seite kürzen (nicht in der Mitte, wie ich es gerne hätte), und man kann keine Farb-Escape-Sequenzen benutzen, weil sonst die Promptlänge durcheinander käme. Ich habe diese Notlösung jetzt mal im obigen Code eingebaut, aber richtig glücklich bin ich damit nicht. |
|
Back to top |
|
|
Necoro Veteran
Joined: 18 Dec 2005 Posts: 1912 Location: Germany
|
Posted: Sat Sep 15, 2007 8:03 pm Post subject: |
|
|
mv wrote: | Ich sprach von vordefinierten completions. Die zsh-completion hat halt nur ein paar für die Gentoo-Utilities, während app-shells/bash-completion Completions für hunderte von Kommandos hat und z.B. die Optionen und Extensions für spezielle Programme wie mplayer immer wieder aktualisiert werden. Das möchte ich wirklich nicht von Hand für jedes Programm in der zsh nachbauen und ständig aktualisieren. Klar, das erste, was ich in zshrc gemacht hatte, war (in Abwandlung einer FAQ) |
Sorry -- aber bevor du hier schwachsinn erzählst: Im Paket "zsh-completion" sind wirklich nur die für emerge, equery etc. drin --- die anderen sind standardmäßig vorhanden *kopfschüttel* -- erst ausprobieren - denn Reden _________________ Inter Deum Et Diabolum Semper Musica Est. |
|
Back to top |
|
|
|