1

Onderwerp: [howto] Wat heb ik toch een rare prompt in een xterm/rxvt!

Het komt vaak voor dat je op de tekst console een andere prompt hebt dan in (bv) een xterm onder X.

Op de console wordt bijvoorbeeld de huidige directorie in de prompt weergegeven:

bilbo@bilbo:~$ cd /usr/src/linux
bilbo@bilbo:/usr/src/linux$ 

en in een xterm zie je dan dit

bash-2.05a$ cd /usr/src/linux/
bash-2.05a$ pwd
/usr/src/linux
bash-2.05a$ 

Beetje irri, toch?

Zoals zo vaak is het antwoord te vinden in de manpages. In dit geval in de manpage van bash...... maar dat is een hond van een document (5142 regels!). Kom daar als newbie maar een uit, als je al weet dat je manpage van bash nodig hebt.

Daarom hier de (beperkte) info van wat ik er van weet:

Probleem is dat bash op 2 manieren gestart kan worden.
Uit de manpage

INVOCATION
       A login shell is one whose  first  character  of  argument
       zero is a -, or one started with the --login option.

       An  interactive  shell  is  one started without non-option
       arguments and without the -c option whose  standard  input
       and  output are both connected to terminals (as determined
       by isatty(3)), or one started with the -i option.  PS1  is
       set  and  $- includes i if bash is interactive, allowing a
       shell script or a startup file to test this state.

Het komt er op neer dat bash:
- Gestart kan worden als login shell, zoals dat gebeurt na het inloggen.
- Gestart kan worden interactive shell, wat gebeurt als je bv xterm start.

Het probleem is nu dat bash voor elke van deze 2 methodes verschillende opstart bestanden gebruikt.
Uit de manpage

       When bash is invoked as an interactive login shell, or  as
       a  non-interactive shell with the --login option, it first
       reads and executes commands from the file /etc/profile, if
       that  file  exists.  After reading that file, it looks for
       ~/.bash_profile, ~/.bash_login, and  ~/.profile,  in  that
       order,  and reads and executes commands from the first one
       that exists and is readable.  The --noprofile  option  may
       be  used  when the shell is started to inhibit this behav-
       ior.

en ff verder op

       When  an  interactive  shell  that is not a login shell is
       started, bash reads and executes commands from  ~/.bashrc,
       if  that  file exists.  This may be inhibited by using the
       --norc option.  The --rcfile file option will  force  bash
       to   read  and  execute  commands  from  file  instead  of
       ~/.bashrc.

Het komt er op neer dat:
- indien bash gestart wordt als login shell, dan wordt het bestand /etc/profile gelezen bij het starten
- indien bash gestart wordt als interactive shell, dan wordt het bestand ~/.bashrc (een verborgen bestand in je home directorie) gelezen

So what zal je zeggen!
Nou juist in /etc/profile en ~/.bashrc wordt je prompt aangemaakt. Zoek in dat bestand maar eens naar de tekst PS1. Hier heb je de mijne:

# Set a default shell prompt:
#PS1='`hostname`:`pwd`# '
if [ "$SHELL" = "/bin/pdksh" ]; then
 PS1='! $ '
elif [ "$SHELL" = "/bin/ksh" ]; then
 PS1='! ${PWD/#$HOME/~}$ '
elif [ "$SHELL" = "/bin/zsh" ]; then
 PS1='%n@%m:%~%# '
elif [ "$SHELL" = "/bin/ash" ]; then
 PS1='$ '
else
 PS1='u@h:w$ '
fi
PS2='> '
export PATH DISPLAY LESS TERM PS1 PS2

Dit betekent dat indien je geen ~/.bashrc hebt, je dus ook geen netjes ingestelde prompt krijgt, maar de default prompt van bash. En aan die prompt heb je dus niet veel.

Maar Linux zou Linux niet zijn als het kennen van het probleem 3/4 van de oplossing is. Je hebt verschillende opties.

- Zorg dat je een ~/.bashrc hebt . Je zou een link kunnen maken naar /etc/profile met `ln -s /etc/profile ~/.bashrc`.
- Start bash met de optie --login zodat hij zich gaat gedragen als een login shell
- Start je terminal programma met de juiste optie om een login shell te worden.

Bijgaand voorbeelden uit de manpages van xterm en rxvt:
xterm:

       -ls     This  option  indicates  that the shell that is started in
               the xterm window will be a login shell  (i.e.,  the  first
               character  of  argv[0]  will  be a dash, indicating to the
               shell that it should read the user's .login or  .profile).

rxvt:


       -ls|+ls
              Start as a login-shell/sub-shell; resource loginShell.

Voor zover ik weet kan aan console (van kde) ook de optie "-ls" meegegeven worden. Console heeft geen manpage sad.

Peter (aka Bilbo) geeft geen garantie op bestand- en padnamen, hij doet aan tab-completion.
http://bilbos-stekkie.com

2

Re: [howto] Wat heb ik toch een rare prompt in een xterm/rxvt!

wat je ook kunt doen is een regeltje in .bashrc opnemen dat /etc/profile laadt als het aanwezig is.... Is een stukje minder werk, ik zal het morgen effe posten

door klachten geen sig meer..

3

Re: [howto] Wat heb ik toch een rare prompt in een xterm/rxvt!

persoonlijk doe ik het nog anders....... mij .bashrc is gewoon 1 regeltje waar ik een PS1 zet

Peter (aka Bilbo) geeft geen garantie op bestand- en padnamen, hij doet aan tab-completion.
http://bilbos-stekkie.com