22. april 2004 - 10:33Der er
40 kommentarer og 2 løsninger
.bashrc virker ikke
Jeg har netop afsluttet min Gentoo installation. Jubii! Jeg har dog et problem. For at gøre mit arbejde lettere har jeg i mine andre Unix miljøer (Red Hat, Fedora, Mandrake, Suse) oprettet nogle alias's i min root og andre brugeres .bashrc fil. Da jeg ville rette i filen for root var filen der ikke og jeg oprettede den. Men det virker ikke. Jeg har logget ud og logget ind igen og jeg har sågar genstartet. Mangler jeg at tilføje noget i filen andet end mine alias's. Ellers skal jeg rette i BASH konfigurationen?
Jeg har lige prøvet at oprette en bruger "fisk". Når jeg logger ind med denne så skriver den:
No directory /home/fisk! Logging in with home = "/".
Jeg har altid været vant til den selv oprettede home mappen for brugeren. Men det gør den måske kun på de andre systemer som jeg har prøvet? Jeg har selv nu specificeret home mappen og den logger ind uden fejlen nu. Jeg har også oprettet en .bashrc for brugeren men det virker stadig ikke ...
Så vidt jeg husker er den eneste fil som bash er absolut tvunget til at køre den der hedder /etc/.profile Du kan uden problemer kalde ~/.bashrc fra den.
yesh.. tilde (~) betyder brugerens homedir. Så hvis du logger ind som root så er ~/.bashrc det samme som /root/.bashrc og hvis du logger ind som fisk så er det det samme som /home/fisk/.bashrc
Jeg har ikke lige noget gentoo ved hånden i dag ellers, men du vil se at i /etc/.profile sætter de umask og lignende ting. Jeg tror iøvrigt at udskiftning af baselayout pakken godt kan finde på at udskifte .profile så du ved det.
Prøv at læse de kommentarer der står i .profile først. Bemærk . iøvrigt cat /etc/.profile og cat /etc/profile
Så kan du sikkert se hvordan det hænger sammen. For at teste en ny profile behøver du iøvrigt ikke at genstarte eller noget. "env-update && source /etc/profile" er nok.
Hvis du skrev sh ~/.bashrc, så er det en undershell, der kører din .bashrc. De aliaser, den laver forsvinder igen lige så snart den undershell slutter. Du skal bruge . ~/.bashrc
"sh" er navnet på en shell. På de fleste Linuxinstallationer er det /bin/sh, og den er tit bare en genvej til /bin/bash, men den kan også være en genvej til /bin/ash eller /bin/dash eller endda en selvstændig shell, så når du starter et script med "sh" kan du faktisk ikke være sikker på, at det er bash, der vil køre det. Når du starter et script med "sh scriptnavn", startes en ny udgave af sh-shellen, som så fortolker scriptet. Når scriptet er færdigt, bliver den nye shell afsluttet, og kontrollen gives tilbage til det sted hvorfra "sh scriptnavn" blev kørt.
"exec" er navnet på en kommando, som er indbygget i f.eks. bash. Den betyder: "erstat den kørende shell med den nye kommando". Det vil sige, at din eksisterende shell bliver afsluttet, når du starter et script med exec. Hvis du starter et script med exec fra en kommandolinie, så skal du være forberedt på, at du skal logge ind igen bagefter.
"." er en anden indbygget kommando i shellen. Den betyder: "kør scriptet som om det stod lige her". Den svarer lidt til mange andre sprogs "include"-funktioner. Det vil sige, at kommandoerne i scriptet bliver kørt af den samme shell, som kaldte scriptet. Dette må ikke forveksles med at skrive "./scriptnavn".
For at afprøve forskellene, så lav to små scripts, som vi kalder hovedscript og underscript
hovedscript: #!/bin/bash MINVAR="hovedscript" echo "MINVAR er $MINVAR \n" sh ~/underscript echo "Tilbage i hovedscript. MINVAR er nu $MINVAR \n"
underscript: #!/bin/bash echo "Vi er i underscript. MINVAR er $MINVAR \n" MINVAR="underscript" echo "I underscriptet er MINVAR nu $MINVAR \n"
Gør det to filer eksekverbare med: chmod u+x hovedscript underscript
Kør hovedscript med: ./hovedscript Se på udskriften. Ret "sh ~/underscript"-linien til ". ~/underscript" og kør igen. Og prøv til sidst med "exec ~/underscript". Læg mærke til hvilke linier der bliver udskrevet (og især IKKE udskrevet) og hvad variablen indeholder de forskellige steder.
Lige nu står den i filen som ~/.bashrc og har jeg også prøvet at lave en ./ og en sh og en exec men som du siger vil det ikke virke og det virker heller ikke med ~/.bashrc.
Jeg har prøvet at ligge dem ind i .bash_profile i brugeren (root) mappe men det virker stadig heller ikke.
Hvis jeg bare i konsollen skriver alias cls='clear' f.eks. virker det fint. Men lige så snart jeg ligger dem i et script virker det ikke lige meget hvordan jeg starter scriptet.
Jeg har i /etc/profile også prøvet at lave en: ehco ~ for at se hvilken mappe den brugte og den viste rigtig nemlig /root eller /home/fisk eller /home/torsk.
Er min bash totalt f*****? Jeg har prøvet at lave en emerge --search "bash" som fortæller mig at den nyeste version af bash er installeret. Hvis min bash er f***** ville det så skade mit system at emerge den (igen)?
sandbox-> Tusind tak for afklaringen. Det var pænt af dig =)
styless-> Jeg håber du forstår at der er forskel mellem "./" og ". /" Det kan ikke skade at emerge bash igen, men det er en helt ny installation og der skulle ikke være noget galt..
Medmindre sandbox har noget at indsige eller en en god forklaring/kommentar eller anden bruger har så prøver jeg at emerge bash igen. Det er sku da lamt at jeg ikke kan køre et script når det virker når jeg indtaster kommandoen manuelt.
Synes godt om
Slettet bruger
23. april 2004 - 13:32#27
Det burde ikke kunne skade at installere den igen, men jeg tvivler også på, at det vil nytte.
Hvordan starter du din shell? Der er nemlig forskel på, om man starter en xterm eller logger ind på konsollen. Får du nogen fejlbeskeder?
I stedet for . kan man forresten også skrive source, så er det lettere at se forskel på det to næsten ens metoder, som opfører sig meget forskelligt.
"./.bashrc" og "~/.bashrc" gør begge det samme, og de kan sammenlignes med "bash .bashrc".
I dette tilfælde skal du bruge ". .bashrc" eller ". ~/.bashrc".
Bemærk iøvrigt, at det er forskelligt, hvornår bash kører /etc/profile og ~/.bash_profile og hvornår den kører /etc/bash.bashrc og ~/.bashrc. Du kan prøve at sætte nogle "echo 'filnavn'"-kommandoer ind i dem, så kan du se hvilke der reelt bliver kørt.
sandbox >> Jeg er ikke inde i et GUI-miljø jeg arbejder på det der skal blive til en server og har derfor ikke nogen GUI. Så jeg bruger ikke xterm. Jeg starter ikke selv bash på nogen måde. Den starter vel som Gentoo har bedt den om :)
Synes godt om
Slettet bruger
23. april 2004 - 13:49#29
Fint, så ved vi, at det er en login-shell. Så vil følgende kommentar fra min ~/.bashrc og ~/.bash_profile måske give et tip:
# ~/.bashrc: executed by bash(1) for non-login shells. # ~/.bash_profile: executed by bash(1) for login shells.
Du skal altså bruge .bash_profile (som odysseus sagde).
sandbox >> ja det virker hvis jeg skriver sådan faktisk
Synes godt om
Slettet bruger
23. april 2004 - 14:01#35
Tjoh, men de er ganske uinteressante, da de bare indeholder standard-ting. Øjeblik, så kommer de.
Synes godt om
Slettet bruger
23. april 2004 - 14:02#36
# ~/.bash_profile: executed by bash(1) for login shells. # see /usr/share/doc/bash/examples/startup-files for examples. # the files are located in the bash-doc package.
umask 022
# the rest of this file is commented out.
# include .bashrc if it exists
#if [ -f ~/.bashrc ]; then # source ~/.bashrc #fi
# set PATH so it includes user's private bin if it exists #if [ -d ~/bin ] ; then # PATH=~/bin:"${PATH}" #fi
# do the same with MANPATH #if [ -d ~/man ]; then # MANPATH=~/man:"${MANPATH}" #fi
Synes godt om
Slettet bruger
23. april 2004 - 14:03#37
# ~/.bashrc: executed by bash(1) for non-login shells. # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) # for examples
# If running interactively, then: if [ "$PS1" ]; then
# don't put duplicate lines in the history. See bash(1) for more options # export HISTCONTROL=ignoredups
# enable color support of ls and also add handy aliases eval `dircolors -b` alias ls='ls --color=auto' #alias dir='ls --color=auto --format=vertical' #alias vdir='ls --color=auto --format=long'
# some more ls aliases #alias ll='ls -l' #alias la='ls -A' #alias l='ls -CF'
# set a fancy prompt PS1='\u@\h:\w\$ '
# If this is an xterm set the title to user@host:dir #case $TERM in #xterm*) # PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"' # ;; #*) # ;; #esac
# enable programmable completion features (you don't need to enable # this, if it's already enabled in /etc/bash.bashrc). #if [ -f /etc/bash_completion ]; then # . /etc/bash_completion #fi fi
Nå men det ser ud til at virke rigtig fint nu. Så hvis du også vil smide et svar sandbox.
Synes godt om
Slettet bruger
23. april 2004 - 17:15#42
Kommer her.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.