RFC: bashrc

Page principale

Répondre à ce message
Auteur: Manu Rouat
Date:  
À: La Guilde
Sujet: RFC: bashrc


SAlut,

je vais un peu etoffer mon article sur bash - voici déjà un .bashrc
avec qques fonctions - des commentaires/suggestions ?


manu# ./.bashrc
#
# Ce fichier est lu à chaque fois qu'on lance bash à condition
# que la variable ENV=$HOME/.bashrc soit bien définie dans le
# le .bash_profile


# D'abord on lit le fichier de définition universel (ou système)
# s'il existe:

if [ -f /etc/bashrc ]; then
    . /etc/bashrc
fi



# Quelques exemples d'alias pratiques:

alias h="history | tail -50 "
alias ..="cd .."
alias j="jobs -l"
alias pp="ps ufx"
alias ls="ls -F --color"
alias ll="ls -al"
alias lt="ls -alt"
alias cd-="cd -"

# Opérations sur disquette avec tar:

alias fdls="tar -tvf /dev/fd0" # liste (Floppy Disk LS)
alias fdr="tar -xvf /dev/fd0" # lecture (Read)
alias fdw="tar -cvf /dev/fd0" # écriture (Write)

# Opérations sur cdrom - assurez-vous de pouvoir le monter
#                        en tant qu'utilisateur 


alias cdmount="mount /mnt/cdrom;cd /mnt/cdrom/ ;ll"
alias cdumount="umount /mnt/cdrom"

# Pour les utilisateurs de RedHat:

alias whichrpm="rpm -qf" # indique à quel rpm appartient un fichier
alias descrpm="rpm -qpli" # décrit le contenu d'un rpm

# Dans Bash, on ne peut pas passer d'arguments dans un alias
# comme dans csh - une façon détournée de le faire est d'utiliser
# une fonction à la place:

function lc() { ls -FCs $* |more; }

# utilisation : faites un "lc /usr/bin"

function search() { find . -name $2 -print | xargs grep -i $1 }

# utilisation: faites un : cd /usr ; search gpl *.c

# une p'tite calculette ?
function calc() { awk "BEGIN{ print $* }" }

# utilisation: calc '(2+7.2)*sin(3.14159)/(2.5*log(10))' (les quotes '' sont indispensables)

# Une fonction un peu plus tordue, un bon exercice consiste
# à comprendre comment ça marche (cette fonction est une des brillantes
# contributions de Fred Albrecht,modifiée par mes soins)


function tree() 
    {
    OPTIND=1
    local type=""
    while getopts :d opt; 
    do
    case $opt in
        d) type="-type d " ;;
        *) echo "Usage: tree [-d] [dirname]"; return ;;
    esac
    shift 1
    done
    local dir=${1:-.}
    (cd ${dir}; pwd)
    find ${dir} ${type} -print | sort -f |
    sed -e "s,^${dir},," -e "/^$/d" -e "s,[^/]*/\([^/]*\)$,\`----\1," -e "s,[^/]*/, |    ,g"
    }


# Celle-ci synchronise un repertoire sur un autre à l'aide de l'utilitaire
# rdist - je m'en sert pour faire un mirroir de mon compte personnel.
# Note: je ne garantie pas que ça marche bien via NFS.....

function fscp()
    {
    local host=${3:-localhost}
    if [ "$#" -lt 2 ]; then
    echo \
    "fscp: synchronize file systems.
    Usage: fscp dir destdir [host]."
    return;
    fi
    echo "Synchronising $2 to $1 on host $host..."
    rdist -p /usr/sbin/rdistd -o remove -c $1 $host:$2
    }



# Celle ci passe tous les noms de fichiers qu'on lui passe en
# minuscules - par example , 'mv2lower *' pour tous les fichiers
# du répertoire courant:

function mv2lower()
    {
    for file ; do
    filename=${file##*/}
    case "$filename" in
    */*) dirname==${file%/*} ;;
    *) dirname=.;;
    esac
    nf=$(echo $filename | tr A-Z a-z)
    newname="${dirname}/${nf}"
    if [ "$nf" != "$filename" ]; then
        mv "$file" "$newname"
        echo "lowercase: $file --> $newname"
    else
        echo "lowercase: $file not changed."
    fi
    done
    }


# Basé sur 'go_netscape' de Gerd Bavendiek bav@??? 97-02-28
# Cette fonction permet soit de lancer netscape s'il n'y en a pas encore
# un qui tourne, soit d'utiliser le netscape déjà lancé comme serveur:

function netscape() 
    {
    local URL=""
    if [ "$#" -lt 1 ]; then
    URL=""
    elif [ -r $1 -a ${1##*/} = $1 ]; then
    URL="$PWD/$1"
    else
    URL="$1"
    fi
    # If you want to look at the URL in a new window,
    # use "openURL($URL, new-window)".
    if [ -h $HOME/.netscape/lock ]; then
    ARGS="-remote \"openURL(${URL})\""
    else
    ARGS="$URL >/dev/null 2>&1 & "
    fi
    eval /usr/bin/netscape ${ARGS} 
}





# Bash possède un grand nombre de paramètres qui modifie son comportement.
# En voici quelques-uns...

set notify
set noclobber


# si vous utilisez xterm, voici un ptit truc sympa pour lui
# faire afficher user@host:pwd dans la barre de titre:

if [ $TERM = 'xterm' ];
then
PS1='\u [\W]> \[\033]0;\u@\h: \w\007\]'
else
PS1='\u [\W]> '
fi


# ou bien encore:

#if [ $TERM = 'xterm' ]
# then export PROMPT_COMMAND='echo -ne "\033]2;"`whoami`@`hostname`: $PWD"\007"'
#fi

# vous pouvez aussi essayer celui-ci, franchement tordu....
# (pour explications, voir Linux Gazette 8 (2C tips) )
#PS1='?[;0H?[K?[0;37;44mPwd:?[1;38;40m$(pwd)?[u\u >'