Pero antes... que é o arquivo .bashrc ?
O arquivo .bashrc (da carpeta $HOME do usuario) é un conxunto de ordes para a shell que se executarán o iniciala, soe servir como arquivo de configuración, o "Advanced Bash Scripting Guide" amosa unha mostra.Agora sí, abrimo-lo arquivo .bashrc e empezamos a fozar, ou podemolo probar directamente nun terminal aberto para non ter que abrir outro cada vez que haxa que probalo ;) ...
1. Añadindo capacidades: Funcións e alias
A linguaxe da shell, como linguaxe de programación que é da a posibilidade de extender as súas capacidades a través das funcións, estas comportanse de forma similar as funcións de outras linguaxes. Unha función defínese así:<nome da función> (){ [<comando>[<comando>[...]] }(O que está entre '<' e '>' sustitúese polo valor que representa, e o '[' e ']' indica que son opcionais.)
Por exemplo, poderíamos definir unha función que tome todos es enlaces dunha páxina web e teríamola sempre a man, coma se fose un comando calqueira:
toma_enlaces (){ curl "$1"| grep -Poi 'href="[^"]*"' | cut -d\" -f2 }
toma_enlaces http://www.tldp.org/LDP/abs/html/functions.html
Os alias son parecidos as funcións, coa diferencia de que o seu uso e só acortar as chamadas, se escrebes no terminal isto amosará os alias activos:
alias
Por exemplo, eu uso moito 'make clean' seguido de 'make', así que podería facer as dúas cousas escrebendo 'remake' no caso de definilo como alias:
alias remake='make clean; make'As cousas como facer que rm sempre pida confirmación (opción -i) faise a través de este mecanismo:
alias rm='rm -i'
Como podedes intuír, estes dous dan para unha boa chea de bromas, por poñer unha máis inocua ca proposta do 'rm', poderíamos facer que o comando 'ls' non amose as liñas coa palabra Imaxe:
alias ls='ls|grep Imaxe'Pero claro, tede en conta que se se pasan parámetros o novo 'ls' realmente acabarán no 'grep'.
2. Un liña de shell feita a medida.
A variable de entorno PS1 define o que amosará o terminal a espera de que escrebamos algo, facede a proba, mandadelle
PS1='$ '
E presto!, liña de comandos simple a rabiar... pero iso non e o que buscamos, verdade?, pois veredes, aquí tedes unha seríe de códigos que representan un valor variable:
\d | A data en formato "Día do mes - Mes - Día" (ex., "Tue May 26") |
\h | O nome do host ata o primeiro `.' |
\H | O nome do host completo |
\j | O número de traballos manexados pola sesión de shell |
\l | O nome do dispositivo de nomes do shell |
\s | O nome da shell (o do executable) |
\t | O tempo actual como 24-horas HH:MM:SS |
\T | O tempo actual como 12-horas HH:MM:SS |
\@ | O tempo actual como como 12-horas am/pm |
\A | O tempo actual como como 24-hour HH:MM |
\u | O nome do usuario |
\v | A versión de bash |
\V | A versión pormenorizada de bash (ex., 2.00.0) |
\w | O directorio actual, co $HOME remplazado por un '~' |
\W | O nome do directorio actual |
\! | O número do comando polo histórico |
\# | O número do comando dentro da shell |
\$ | Se o usuario é root '#', senon '$' |
\nnn | O carácter co número octal nnn |
\\ | Un '\' |
\[ | Comeza unha secuencia de control da shell |
\] | Finaliza unha secuencia de control da shell |
fonte: Wiki de archlinux
Ah, e claro, podémos ver o ćodigo da actual se facemos:
echo $PS1
Por exemplo, se queremos:
<nome do usuario>@<nome do host>:<nome do directorio actual>/<# para root senon $>Faríamos
PS1='\u@\for((i=0;i<10 -en="-en" do="do" done="done" echo="echo" for="for" h:="h:" i="i" j="j" m="m" pre="pre" x1b="x1b">
Tamén podemos darlle color metendo algo entre '\e[0;<código do color>' e '\e[0m', e posible sacar unha 'referencia' dos códigos de color co comando:
for((i=0;i<10;i++));do for((j=0;j<10;j++));do echo -en "\x1b[0;"$i$j"m"$i$j"\x1b[0m " done echo "" done
Por exemplo:
3. Variables de entorno
En poucas palabras, podes usala para preparar todo por anticipado, que tes uns cantos scripts e binarios no directorio do usuario e queres usalos como se foran do sistema sen ter que mandalos o /bin/? (ou sucedaneos), sen problemaexport PATH=$PATH:$HOME/.bin
Ou para evitar que ImageMagick desmadre
export MAGICK_AREA_LIMIT=250M export MAGICK_MEMORY_LIMIT=100MiB export MAGICK_MAP_LIMIT=100MiB
Ou para definir o fondo do 'mutt' como transparente
export COLORFGBG="default;default"
En fin, na miña opinión moi práctico no caso de utilizar con frecuencia programas que usen variables de entorno.
Bonus: avisar dos riscos de traballar como root
if [ $UID = 0 ];then echo -e "\nConfucio dixo: Quen xoga coa raíz acaba matando á arbore.\n" fi
E ti, para que usas o .bashrc?
Buuuuuu! Queremos sangue!!!
ResponderEliminarCando se traballa en equipos de desarrollo, é habitual que o admin faga un grupo de usuarios e o asigne a todos os membros do equipo. Si algún usuario ten permiso de escritura para o grupo no seu $HOME, podemos personalizarlle nós o shell (e si xa ten un .bashrc e non o podemos sobreescribir, podemos acudir ao .profile, etc)
Temos bromas moi simpáticas como o comando sl (típica confusión de ls) que podemos convertir en función ou alias, ou instalar un vello programa que facía recorrer un tren pola pantalla http://www.tkl.iis.u-tokyo.ac.jp/~toyoda/sl/sl.tar
Outras bromas como algo así :
alias vi='open /lost+found/porno-moi-pervertido.mpg'
Buscando "prank .bashrc" en google podemos atopar "personalizacións" como a que segue :
http://linuxshellaccount.blogspot.com.es/2009/04/tiny-unix-and-linux-shell-crash-course.html
E si o usuario é sudoer, temos tamén moitas opcións
Hehe, que perigo :P
ResponderEliminarPero despois de ler o post dos alias quedoume a duda, se fas 'alias' a 'alias', todos os cambios quedan blocados, non si?
Saúdos e gracias polo aporte.
Si, habería que facer alias a 'alias' e a 'unalias'.
EliminarPero sempre se poderia facer un "/bin/bash --rcfile bash_rc_sen_trampas" e abririamos un shell que obteria o ficheiro de configuración que lle pasemos como parámetro. Ou tamén utilizar calquer dos outros intérpretes de comandos (tcsh, korn shell, ...) para desfacer o entuerto.
E xa non me lembro moi ben, pero creo que era SuSe a que tiña uns ficheiros de configuración de terminal increiblemente bos e didácticos. Igual era outra distro