Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
Bash : ma redéfinition de cd (avec ls etc ..)
Envoyé par: eolymhn

Bonjour,

Je viens de "finir" ma redéfinition de la commande cd. On va dire quel est en version béta, vous pouvez donc l'utiliser à votre guise, la modifier, en faire ce que vous voulez... en revanche si vous pouvez suggérer vos amélioration ...

Si vous voulez l'essayer, je la met personnellement dans .bashrc de mon home pour qu'elle s'aplique à chaque lancement, je ne sais pas si c'est l'endroit le mieux adapté.

J'ai commencé par la faire pour moi, puis j'ai essayé de l'adapter un maximum. Je l'utilise sur Konsole (fond noir) et en 1280*1024 mais elle est utilisable en 800*600 bien que pour le confort, un minimum de 1024*768 est necessaire.

Pour le moment, la seul adaptation à faire est la valeur d'une variable, qui défini la largeur en nombre de caractère (pour les séparations). Seulement j'ai vu que la fonction ls se réglait automatiquement ... Y a t-il une variable d'environnement... ou autre pour cette aspect (histoire que ca ce fasse automatiquement) ?

J'ai un autre petit détaille que je voudrai règler :
builtin cd $1 || echo $err;

S'il y a une erreur, il affiche un message personnalisé, seulement il affiche également le message d'erreur de la fonction cd, est-il possible de la désactiver ?

J'ai essayé de la commenter un maximum mais dites moi si un passage vous échappe.

Bon, j'arrète d'en parler de ce code (de débutant ...), le voici :

############################################################################
#1=emphrase; 4=souligné, 5=clignotant, 7=surligné, 30=noir, 31=rouge, 32=vert, 33=orange/jaune, 34=bleu, 35=violet/rose, 36=cyan
color() {
printf "\033[%sm%s\033[m\n" "$@"
}

alias s="cd ../";
alias c=cd;
alias d=cd;
alias dc=cd;
PS1="\W>"


cd () {

length=100 #Longueur des lignes de séparations / largeur général de l'affichage



######################## COLOR FANTASY ########################
# Je ne savais pas quoi mettre comme couleurs, donc elles se définissent aléatoirement...
r1="$[ $[ $[ $RANDOM * 6 ] / 32767 ] + 1 ]";

rx=$r1;
while [ $rx == $r1 ] ; do rx="$[ $[ $[ $RANDOM * 6 ] / 32767 ] + 1 ]"; done
r2=$rx;

while [ $rx == $r1 ] || [ $rx == $r2 ] ; do rx="$[ $[ $[ $RANDOM * 6 ] / 32767 ] + 1 ]"; done
r3=$rx;

while [ $rx == $r1 ] || [ $rx == $r2 ] || [ $rx == $r3 ] ; do rx="$[ $[ $[ $RANDOM * 6 ] / 32767 ] + 1 ]"; done
r4=$rx;

while [ $rx == $r1 ] || [ $rx == $r2 ] || [ $rx == $r3 ] || [ $rx == $r4 ] ; do rx="$[ $[ $[ $RANDOM * 6 ] / 32767 ] + 1 ]"; done
r5=$rx;

while [ $rx == $r1 ] || [ $rx == $r2 ] || [ $rx == $r3 ] || [ $rx == $r4 ] || [ $rx == $r5 ] ; do rx="$[ $[ $[ $RANDOM * 6 ] / 32767 ] + 1 ]"; done
r6=$rx;

LS_COLORS="no=00:fi=00:di=01;3$r4:ln=01;3$r6:pi=40;3$r3:so=01;3$r5:bd=40;3$r3;01:cd=40;3$r3;01yawning smileyr=01;05;37;41:mi=01;05;37;41:ex=01;3$r2:*.cmd=01;3$r2:*.exe=01;3$r2:*.com=01;3$r2:*.btm=01;3$r2:*.bat=01;3$r2:*.sh=01;3$r2:*.csh=01;3$r2:*.tar=01;3$r1:*.tgz=01;3$r1:*.arj=01;3$r1:*.taz=01;3$r1:*.lzh=01;3$r1:*.zip=01;3$r1:*.z=01;3$r1:*.Z=01;3$r1:*.gz=01;3$r1:*.bz2=01;3$r1:*.bz=01;3$r1:*.tz=01;3$r1:*.rpm=01;3$r1:*.cpio=01;3$r1:*.jpg=01;3$r5:*.gif=01;3$r5:*.bmp=01;3$r5:*.xbm=01;3$r5:*.xpm=01;3$r5:*.png=01;3$r5:*.tif=01;3$r5:"
#################################################################


err=` color 31 "CD ERROR ..." `

### Commande CD ###

# équivaut à ls lorsque l'on donne aucun attribut
if [ -z "$1" ] ; then
builtin cd $PWD;
else
# l'un lorscequ'on tape tout comme des grands, l'autre pour les fénéants (moi par exemple)
case "$1" in
*/)
builtin cd $1 || echo $err; ## si problème on affiche une erreur de manière à s'en rendre compte
;;
*)
builtin cd $1* || echo $err; ## idem la petit erreur, en revanche je ne sais pas comment empecher celle de cd...
;;
esac
fi

###################

### Commande LS ###


### séparation supérieur dont le dossier courant ($PWD) : d'où les boucles pour garder toujours la même taille de séparation

echo
echo -n ` color 3$r3 "----"`
echo -n " ` color 1 $PWD ` "

sustr=$[ ${#PWD} + 6 ] # ce que l'on enlève par rapport à ci-dessus (6 pour 4 tires et 2 espaces)
nbtire=$[ $[ $length - $sustr ] / 5 ] # première boucle
nbreste=$[ $[ $length - $sustr ] % 5 ] # desième boucle

#Première boucle à la vitesse de 5 tires/tr
x=1
while [ $x -le $nbtire ] ; do {
echo -n ` color 3$r3 "-----" `
x=$[ $x + 1 ]
} done

#Une seconde pour achever la séparation au tatonnement...
x=1
while [ $x -le $nbreste ] ; do {
echo -n ` color 3$r3 "-" `
x=$[ $x + 1 ]
} done

echo

#ls avec mes préférences ...
case "$2" in
-l)
ls -lap
;;
-a)
ls -p
;;
-la | -al)
ls -lp
;;
*)
ls -ap
;;
esac

## séparation inférieur, rien que des tires

sep_inf=$[ $length / 5 ]
sep_infreste=$[ $length % 5 ]

##On reprend les boucles...
x=1
while [ $x -le $sep_inf ] ; do {
echo -n ` color 3$r3 "-----" `
x=$[ $x + 1 ]
} done

x=1
while [ $x -le $sep_infreste ] ; do {
echo -n ` color 3$r3 "-" `
x=$[ $x + 1 ]
} done

echo
###################

}
cd

############################################################################


Voila, j'attends avec impacience vos commentaires.

Poste le Wednesday 13 April 2005 18:12:54
Répondre     Citer    
Re: Bash : ma redéfinition de cd (avec ls etc ..)
Envoyé par: eolymhn

dsl pour la largueur de la page, c'est désagréable ...

Poste le Wednesday 13 April 2005 18:15:00
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
Bash : ma redéfinition de cd (avec ls etc ..)
Un problème avec une commande du shell ? Comment utiliser la crontab ? Vous avez des soucis pour la gestion réseau sous Linux ? Pour vous la gestion des utilisateurs/groupes est du chinois ? Etc... Posez donc vos questions ici.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons