Bash

0 2218

Fuente:Bash Reference Manual

Cuando introducimos un comando en BASH el sistema busca un archivo con ese nombre en todos los directorios contenidos en la variable PATH. En caso de no encontrarlo se retorna un mensaje de error especificando que el comando no ha sido encontrado. Para saber los directorios contenidos en PATH debes escribir en la consola:

$ echo $PATH

Te retornará algo como esto:

/usr/local/bin:/usr/bin:/bin:/usr/games/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/lib/qt/bin

Cada ruta de directorio aparece separada por dos puntos (:). En caso de que desees agregar directorios a tu PATH puedes hacerlo de dos formas: La primera los hace válidos por el tiempo que dura tu sesión, la segunda los hace permanentes.

Para el primer caso basta escribir en el terminal:

$ PATH="$PATH:::..."

Supongamos que tenemos un usuario que desea agregar dos carpetas a su PATH, ambas contenidas en ~/: la carpeta Scripts y la carpeta compilados. Tendría que escribir en el terminal:

$ PATH="$PATH:/home/nombreusuario/Scripts:/home/nombreusuario/compilados"

De esa manera ambos directorios se agregan a su variable PATH. Sin embargo, estos cambios no son permanentes y la próxima vez que el usuario acceda a su cuenta todas las modificaciones se habrán perdido.
Para que los cambios sean permanentes es necesario editar un par de archivos: ~/.bash_profile y ~/.bashrc

~/.bash_profile
Editar este archivo permite especificar una serie de comandos que se ejecutarán en cuanto el usuario acceda a su cuenta. En caso de que el archivo no exista puedes crearlo. Un ejemplo de lo que contiene este archivo es el siguiente:

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

BASH_ENV=$HOME/.bashrc
USERNAME=""
PATH=$PATH:/usr/local/pgsql/bin:/usr/local/sbin:/usr/sbin:/sbin
MANPATH=$MANPATH:/usr/local/pgsql/man
PGLIB=/usr/local/pgsql/lib
PGDATA=/usr/local/pgsql/data

export USERNAME BASH_ENV PATH MANPATH PGLIB PGDATA

Los directorios que aparecen asignados a la variable PATH se sumarán a los directorios básicos que asigna el sistema a todos los usuarios. El archivo .bash_profile se carga cada vez que el usuario realiza un login a su cuenta. Para decirlo de un modo más específico, cada vez que Bash es invocado mediante un login shell interactivo (cuando te logeas con tu password)o mediante un shell no interactivo con la opción –login, primero lee y ejecuta los comandos desde el archivo /etc/profile, en caso de que este archivo exista. Luego de leer este archivo busca los archivos ~/.bash_profile, ~/.bash_login y ~/.profile, en ese orden. La idea es que se ejecutarán los comandos del primero de los archivos que sea encontrado y sea legible. Una vez encontrado este archivo no seguirá buscando los demás, por esa razón es que es preferible asegurarse de trabajar con el primer archivo de la lista.

Nota: ~/ se usa para indicar tu directorio home. Si tu usuario es luis, por ejemplo, ~/ corresponde a /home/luis/

Sin embargo, si accedemos a un terminal desde un entorno de escritorio como Gnome, KDE o Xfce, nos encontraremos con que el archivo .bash_profile no es leído. En ese caso, además, debemos modificar el archivo .bashrc

~/.bashrc
Cuando se inicia un shell interactivo que no es un login shell, es decir que no requiere que ingreses a tu cuenta con tu clave y nombre de usuario, Bash lee y ejecuta comandos desde ~/.bashrc, si es que ese archivo existe. Un ejemplo del contenido de este archivo sería el siguiente:

alias ll="ls -al --color"
alias nautilus="nautilus --no-desktop"
alias aterm="aterm -fg white -tr"
export PS1='\u[\W]\$ '
export PAGER="most"
export PATH=$PATH:/usr/local/sbin:/usr/sbin:/sbin

Esta última linea contiene los directorios que se sumarán a los que cada usuario tiene por defecto.
De esta manera, editando ambos archivos es posible modificar tu variable PATH.

Por supuesto, existe más de un método de hacer todo lo anterior, es cosa de descubrir la forma que prefieras. Se puede, también, modificar los archivos /etc/profile y /etc/bashrc que corresponden a los archivos ~/.bash_profile y ~/.bashrc, pero que afectan a todos los usuarios. Evidentemente que para modificarlos necesitarás permisos de superusuario.

0 4086

FIFO es el acrónimo de First Input First Output (Primero que entra, primero que sale). En programación se usa dentro de las estructuras de datos.

Partiendo de este echo, en UNIX existen una especie de ficheros que se utilizan para comunicar procesos, de modo que se puedan sincronizar e intercambiar información. El funcionamiento es bastante sencillo, un proceso se encarga de escribir en el fichero FIFO, y otro de leer. Cada uno de los procesos se quedarán bloqueados hasta que el otro actúe.

Esto lo podemos probar del siguiente modo:

$ mkfifo /tmp/fi

Con el comando anterior, habrás creado el fichero FIFO. Puedes comprobarlo con un

$ ls -l /tmp

$ echo Hola Mundo > /tmp/fi

El proceso que hemos lanzado, se quedará bloqueado intentando escribir hasta que haya otro proceso lea ese fichero. Para ello desde otra terminal lanzamos este comando:

$ cat /tmp/fi 
Hola Mundo

En este momento, habrán quedado ambos procesos desbloqueados.

5 4154

Gentoo tiene un estilo con colores en Bash, si queremos tener el mismo esquema hay que seguir los siguientes pasos:

Tenemos que crear un archivo de colores llamado ~/.dir_colors y le agregamos las siguientes lineas:

# Configuration file for dircolors, a utility to help you set the
# # LS_COLORS environment variable used by GNU ls with the --color
# option.
# #
# # You can copy this file to .dir_colors in your $HOME directory to
# override
# # the system defaults.
#
# Below, there should be one TERM entry for each termtype that is colorizable
TERM ansi
TERM color-xterm
TERM con132x25
TERM con132x30
TERM con132x43
TERM con132x60
TERM con80x25
TERM con80x28
TERM con80x30
TERM con80x43
TERM con80x50
TERM con80x60
TERM cons25
TERM console
TERM cygwin
TERM dtterm
TERM Eterm
TERM gnome
TERM konsole
TERM kterm
TERM linux
TERM linux-c
TERM mach-color
TERM putty
TERM rxvt
TERM rxvt-cygwin
TERM rxvt-cygwin-native
TERM rxvt-unicode
TERM screen
TERM screen-bce
TERM screen-w
TERM screen.linux
TERM vt100
TERM xterm
TERM xterm-256color
TERM xterm-color
TERM xterm-debian
#
# Below are the color init strings for the basic file types. A color init
# string consists of one or more of the following numeric codes:
# Attribute codes:
# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
# Text color codes:
# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
# Background color codes:
# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
NORMAL 00 # global default, although everything should be something.
FILE 00 # normal file
DIR 01;34 # directory
LINK 01;36 # symbolic link. (If you set this to 'target' instead of a
# numerical value, the color will match the file pointed to)
FIFO 40;33 # pipe
SOCK 01;35 # socket
DOOR 01;35 # door
BLK 40;33;01 # block device driver
CHR 40;33;01 # character device driver
ORPHAN 01;05;37;41 # orphaned syminks
MISSING 01;05;37;41 # ... and the files they point to
# This is for files with execute permission:
EXEC 01;32
# List any file extensions like '.gz' or '.tar' that you would like ls # to colorize below. Put the extension, a space, and the color init string.
# (and any comments you want to add after a '#')
.cmd 01;32 # executables (bright green)
.exe 01;32
.com 01;32
.btm 01;32
.bat 01;32
.sh 01;32
.csh 01;32
.tar 01;31 # archives / compressed (bright red)
.tgz 01;31
.arj 01;31
.taz 01;31
.lzh 01;31
.zip 01;31
.z 01;31
.Z 01;31
.gz 01;31
.bz2 01;31
.bz 01;31
.tbz2 01;31
.tz 01;31
.deb 01;31
.rpm 01;31
.rar 01;31 # app-arch/rar
.ace 01;31 # app-arch/unace
.zoo 01;31 # app-arch/zoo
.cpio 01;31 # app-arch/cpio
.7z 01;31 # app-arch/p7zip
.rz 01;31 # app-arch/rzip
.jpg 01;35 # image formats
.jpeg 01;35
.gif 01;35
.bmp 01;35
.ppm 01;35
.tga 01;35
.xbm 01;35
.xpm 01;35
.tif 01;35
.tiff 01;35
.png 01;35
.mng 01;35
.xcf 01;35
.pcx 01;35
.mpg 01;35
.mpeg 01;35
.m2v 01;35 # MPEG-2 Video only
.avi 01;35
.mkv 01;35 # Matroska (http://matroska.org/)
.ogm 01;35 # Ogg Media File
.mp4 01;35 # "Offical" container for MPEG-4
.m4v 01;35 # MPEG-4 Video only
.mp4v 01;35 # MPEG-4 Video only
.mov 01;35 # Quicktime (http://developer.apple.com/qa/qtw/qtw99.html)
.qt 01;35 # Quicktime (http://developer.apple.com/qa/qtw/qtw99.html)
.wmv 01;35 # Windows Media Video
.asf 01;35 # Advanced Systems Format (contains Windows Media Video)
.rm 01;35 # Real Media
.rmvb 01;35 # Real Media Variable Bitrate
.flc 01;35 # AutoDesk Animator
.fli 01;35 # AutoDesk Animator
.gl 01;35
.dl 01;35
.pdf 00;32 # Document files
.ps 00;32
.txt 00;32
.patch 00;32
.diff 00;32
.log 00;32
.tex 00;32
.doc 00;32
.mp3 00;36 # Audio files
.wav 00;36
.mid 00;36
.midi 00;36
.au 00;36
.ogg 00;36
.flac 00;36
.aac 00;36

Seguimos ahora editando el archivo ~/.bashrc agregando las siguientes lineas para utilizar el archivo dir_colors que se creo previamente:

if [[ -f ~/.dir_colors ]]; then
eval $(dircolors -b ~/.dir_colors)
fi

Y verificamos que en el mismo archivo esten habilitadas las siguientes lineas:

alias ls='ls --color=yes' #Te mostrará siempre la salida de ls con colores.
alias grep='grep --colour=auto' #Te mostrará la salida de grep con colores.
alias absfind='find /var/abs | grep ' # muy útil para buscar paquete en abs. En ArchLinux

1 6743

Ahora agregaremos dos complementos para hacer de VIM nuestro IDE de BASH, C y C++:

Bash-support Plugin

Con el “Bash-support plugin” para VIM podremos automatizar tareas de edición que como programadores nos vemos obligados a repetir mucho:

  • Añadir automáticamente cabeceras a los ficheros
  • Añadir comentarios a de diversos tipos
  • Escribir los esqueletos de los distintos comandos de control (if, case, for, while…)
  • Verificar la sintaxis
  • Consultar la documentación de un comando de Bash
  • Convertir un bloque de código en comentario o viceversa
  • Escribir rápidamente expresiones regulares

Este “plugin” de soporte para Bash es capaz de hacer todo lo anterior y por lo tanto nos ahorrará mucho tecleo. Veremos cómo instalarlo:

Paso 1: Descargar el plugin.

Mediante los siguientes comandos podemos descargar los componentes de esta extensión desde vim.org

$ su (teclean el passwd de root)
# cd /usr/src
# wget -O bash-support.zip http://www.vim.org/scripts/download_script.php?src_id=9890

Paso 2: Instalarlo.

Vuelve a la sesión de tu usuario personal (repetir esto con cada usuario para el que quieras activar el soporte avanzado para Bash en Vim) y teclea:

$ mkdir ~/.vim # puede que el directorio ya exista
$ cd ~/.vim
$ unzip /usr/src/bash-support.zip

Paso 3: Activarlo

Edita tu fichero ” .vimrc” del usuario para el que quieras activar el soporte e incorpórale al final el texto que se indica:

$ vim ~/.vimrc
filetype plugin on

Visto aquí

C.Vim Plugin

Como programador, hay que hacer muchas tareas repetitivas, mientras hacemos la codificación, tales como:

  • Agregar el archivo de cabecera
  • Adición de la función / marco comentario
  • Incluye fragmento de código por defecto
  • Realización de comprobar la sintaxis
  • Lectura de la documentación acerca de una función
  • Conversión de un bloque de código de presentar sus observaciones, y viceversa

Este “plugin” de soporte a C y C++ es capaz de hacer todo lo anterior y por lo tanto nos ahorrará mucho tecleo. Veremos cómo instalarlo:

Paso 1: Descargar el plugin.

Mediante los siguientes comandos nos podemos descargar los componentes de esta extensión desde vim.org

# su (teclean el passwd de root)
# cd /usr/src
# wget -O cvim.zip http://www.vim.org/scripts/download_script.php?src_id=9990

Paso 2: Instalarlo.

Vuelve a la sesión de tu usuario personal (repetir esto con cada usuario para el que quieras activar el soporte avanzado para C/C++ en Vim) y teclea:

$ mkdir ~/.vim # puede que el directorio ya exista
$ cd ~/.vim
$ unzip /usr/src/cvim.zip

Paso 3: Activarlo

Edita tu fichero ” .vimrc” del usuario para el que quieras activar el soporte e incorpórale al final el texto que se indica:

$ vim ~/.vimrc
filetype plugin on

Visto aquí

Espero les sirva, Saludos!


Warning: Parameter 1 to W3_Plugin_TotalCache::ob_callback() expected to be a reference, value given in /home/admin/web/k4ch0.org/public_html/wp-includes/functions.php on line 3594