|
CURSO DESDE 0 DE GNU/LINUX. Versión 2.
Entrega 36. Personalización del entorno (II).
% gotta light?
No match.
Continuamos, Yo quiero definir mis propias variables.
Para definir nuestras propias variables, que se usen en el entorno de ejecución, lo tenemos muy fácil. Es tan sencillo como:
Nombre=Valor
Donde nombre es el nombre de la variable y valor una cadena. Si necesitamos tener espacios en el valor debemos usar las comillas, ya sean dobles o simples.
|
matados2k@imperio:~$ FGH=9
matados2k@imperio:~$ echo FGH
FGH
matados2k@imperio:~$ echo $FGH
9
matados2k@imperio:~$
|
Hay que acordarse siempre de usar el símbolo '$' para ver el contenido de la variable, para cambiar el valor de la variable simplemente la volvemos a definir:
|
matados2k@imperio:~$ FGH="Soy Matados2k"
matados2k@imperio:~$ echo ¿Quién eres tu? $FGH
¿Quién eres tu? Soy Matados2k
matados2k@imperio:~$
|
Ahora podéis observar cómo he cambiado su valor y he añadido comillas para poder darle el valor de cadenas con espacios. Es muy importante no dejar espacios entre el nombre de la variable, el '=' y el valor, o si no:
|
matados2k@imperio:~$ FGH = 9
bash: FGH: command not found
matados2k@imperio:~$ FGH= 9
bash: 9: command not found
matados2k@imperio:~$ FGH=Hola soy yo
bash: soy: command not found
matados2k@imperio:~$
|
Pero definir así una variable tiene la limitación de que sólo funcionará en esa variable en esa ejecución de bash, y si lanzamos un proceso que a su vez lance procesos hijos no tendrán acceso a esa variable:
|
matados2k@imperio:~$ FGH=9
matados2k@imperio:~$ bash
matados2k@imperio:~$ echo $FGH
matados2k@imperio:~$ exit
exit
matados2k@imperio:~$ echo $FGH
9
matados2k@imperio:~$
|
En este ejemplo lo vemos claramente, primero definimos la variable, arrancamos otra ejecución de 'bash' dentro de 'bash' e intentamos visualizar la variable, la nueva ejecución de 'bash' no ha heredado la variable... si salimos de ella y volvemos a la ejecución de 'bash' original sí podemos visualizarla.
Voy a llegar a todos lados, lo vais a ver.
Pues así esto no es de mucha ayuda, así que vamos a ver una nueva forma de definir nuestra variable o simplemente de ampliarla.
export variable[=valor]
declare -x variable[=valor]
En este caso es opcional definirle un valor porque la variable puede haberse declarado con anterioridad, tanto la primera como la segunda forma hacen lo mismo y la más usada es la primera:
|
matados2k@imperio:~$ export FGH
matados2k@imperio:~$ bash
matados2k@imperio:~$ echo $FGH
9
matados2k@imperio:~$
|
Veamos lo mismo pero con declare:
|
matados2k@imperio:~$ export FGH=9
matados2k@imperio:~$ declare -x HGF=6
matados2k@imperio:~$ echo $HGF
6
matados2k@imperio:~$ bash
matados2k@imperio:~$ echo $HGF
6
matados2k@imperio:~$
|
Pues ahora quiero eliminarlas.
También podemos destruir las variables de la siguiente forma:
unset nombre
Veamos un ejemplo:
|
matados2k@imperio:~$ unset HGF
matados2k@imperio:~$ unset FGH
matados2k@imperio:~$ echo $FGH $HGF
matados2k@imperio:~$
|
En definitiva, rápido, fácil y sencillo.
Un momento, para el carro que te he calado.
Si hacéis pruebas y por ejemplo ejecutáis un terminal exportáis una variable y luego lo cerráis, se pierde la variable o bien abrís dos sesiones de consola en distintos terminales, veréis que lo que se exporta en una no se ve en la otra. ¿Esto por qué?
Porque la exportación se produce de padres a hijos. Entonces, ¿cómo definimos una variable para todos y para siempre? Pues en los ficheros de arranque como '~/.bashrc' para todas las sesiones de un usuario y en '/etc/profile' si quieres que sea efectivo para todo el mundo y todo solucionado.
Muy bien, y todo este rollo ¿Para qué me vale?.
Pues por ejemplo para cambiar una variable de entorno muy importante, para personalizar nuestro propio entorno, valga la redundancia. Esta variable es una de la más importantes y se llama PATH:
|
matados2k@imperio:~$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
matados2k@imperio:~$
|
PATH es un listado de rutas separadas por ':' donde los intérpretes de comando buscarán los comandos a ejecutar. Por ejemplo, cuando ejecutamos 'ls' , lo primero que hará 'bash' es buscarlo en '/usr/local/bin', como no lo encuentra lo buscará '/usr/bin' donde tampoco está, y finalmente lo encontrará en '/bin' donde sí está y lo ejecuta. ¿Qué pasaría si elimino '/bin' de la ruta y ejecuto 'ls'?
|
matados2k@imperio:~$ PATH=/usr/local/bin:/usr/bin:/usr/bin/X11:/usr/games
matados2k@imperio:~$ ls
bash: ls: command not found
matados2k@imperio:~$
|
Vaya, ahora tendría que ejecutar '/bin/ls' para que fuera efectivo:
|
matados2k@imperio:~$ /bin/ls
2805-fantasy.jpg
...
XF86Config-4ACTUAL
xmms-playlist
matados2k@imperio:~$ PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
matados2k@imperio:~$
|
Así que mejor lo dejo como estaba :). Si queremos que mire en algún directorio más aparte de los ya definidos, la forma correcta sería:
export PATH=$PATH:Nueva_ruta
Vamos a ver un ejemplo donde me defino un nuevo directorio con un script muy simple:
|
matados2k@imperio:~$ cd curso
matados2k@imperio:~/curso$ mkdir miscomandos
matados2k@imperio:~/curso$ echo echo Quien quiere las come quien no las deja > ./miscomandos/lentejas
matados2k@imperio:~/curso$ chmod +x ./miscomandos/lentejas
matados2k@imperio:~/curso$ ./miscomandos/lentejas
Quien quiere las come quien no las deja
matados2k@imperio:~/curso$ PATH=$PATH:/home/matados2k/curso/miscomandos/
matados2k@imperio:~/curso$ lentejas
Quien quiere las como quien no las deja
matados2k@imperio:~/curso$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/home/matados2k/curso/miscomandos/
matados2k@imperio:~/curso$
|
Como veis un ejemplo muy estúpido que nos muestra de forma muy clara y contundente la gran utilidad que tiene manejar estas variables de entorno y saber dónde definirlas para que queden para siempre.
Despedida.
¡Ohh!... Se nos vuelve a acabar el espacio de esta semana justo cuando viene lo mejor, pero qué malo que soy. En la siguiente entrega vamos a profundizar más en esta variable y otras muy interesantes que nos permitirán modificar la información de nuestro 'prompt', no me faltéis.
Agradecimientos:
· Revisión del documento: karuchi (Carolina García).
Página oficial y dominio de mi propiedad http://matados2k.es
Matados'2k Usuario y moderador de foro.noticias3d.com
Matados'2k Usuario y moderador de www.sinuh.org
,
matados2k (arroba) gmail (punto) com
|
Este documento está sometido a la licencia de creative commons en su variante “Reconocimiento-NoComercial-SinObraDerivada 2.1 España” . Es de agradecer que se comunique al autor el uso de este documento en otro medio y se debe incluir de forma obligatoria este recuadro y los agradecimientos.
|
Sólo los usuarios registrados pueden escribir comentarios. Por favor valídate o regístrate. Powered by AkoComment 2.0! |