¿Requieres de una instalación o configuración de Linux o sus servicios?
¿Un desarrollo WEB empresarial a la medida?
¿Un curso o capacitación a la medida?
Revisa el sitio de SERVICIOS de LinuxTotal


Como extraer el directorio actual de pwd 

Copyright © 2005-2024 LinuxTotal.com.mx
Se concede permiso para copiar, distribuir y/o modificar este documento siempre y cuando se cite al autor y la fuente de linuxtotal.com.mx y según los términos de la GNU Free Documentation License, Versión 1.2 o cualquiera posterior publicada por la Free Software Foundation.

Autor: Sergio González D.  

Eventualmente, mientras más se aprende a usar la línea de comandos y a realizar shell scripts, en alguno de estos scripts necesitarás solo el directorio actual o base que te devuelve el comando pwd, veamos:

$> cd /var/log/httpd
$> pwd
/var/log/httpd

En este caso el directorio base sería 'httpd', pero pwd nos devuelve la ruta completa, y solo se desea el último de la ruta. Buscando en Internet encontré al menos cuatro formas de realizar lo anterior, si sabes de alguna otra manera, mándame un correo con otra solución para incluirla.


basename

El comando basename es lo más sencillo para extraer el directorio base, y funciona escribiendo la ruta completa:

$> basename /usr/local/bin
bin

Regresa el directorio base, en este caso 'bin', pero en este modo no es muy útil para usarlo dentro de shell scripts que pueden estar cambiando de directorio, entonces lo combinamos con pwd y obtenemos lo siguiente:

$> cd /var/www/html
$> basename `pwd`
html

Al poner entre comillas graves o backticks a pwd se ejecuta y queda el resultado como argumento de basename.


Sustitución de parámetros en variables

Cuando se manejan variables en el shell bajo el formato ${parámetro} es posible alterar o manipular el valor de una variable y mostrar el resultado ya cambiado.

La variable de entorno PWD contiene la ruta actual del directorio de trabajo, tal como si se invocara el comando pwd:

$> cd /var/log/squid
$> echo $PWD
/var/log/squid

Ahora usamos echo con sustitución de parámetros con la opción de remover '##', la sintaxis es la siguiente: ${variable##cadena}, esto es, remueve '##' de la 'variable' la parte más larga de la 'cadena' que iguale hasta el final de la 'variable'. Mmmmm, revoltoso, mejor veamos el ejemplo para tratar de entenderlo mejor:

$> cd /var/log/squid
$> echo ${PWD##*/}
squid

La 'variable' o su valor es PWD=/var/log/squid, después se indica remover ## hasta la parte más larga o última de toda la cadena '*' y hasta encontrar el caracter '/'. En otras palabras busca dentro de la variable hasta encontrar la última coincidencia de '/' y elimina toda esa parte, dejando solo 'squid' que sería el directorio de trabajo actual o basename directory.

Si se usará un solo '#' entonces para este caso no nos serviría ya que '#' remueve hasta la parte más corta o en otras palabras hasta la primera coincidencia de '/' y nos dejaría algo como esto: , eliminando sola hasta la primera diagonal.


Con awk y rev

Esta es una solución tal vez no muy práctica pero interesante y educativa. VEamos:

$> cd /var/www/html
$> pwd|rev|awk -F \/ '{print $1}'|rev
html
squid

rev pone una frase o palabra al revés y awk es el poderoso analizador semántico de los sistemas Linux/Unix y con la opción se le esta indicando que el separador de campos (Fields) es la '/', la '\' indica secuencia de escape, y se le indica que despliegue o imprima el campo número 1 ('{print $1}'). Este tipo de ejemplos es más fácil entenderlo por partes:

$> pwd
/var/www/html
$> pwd|rev     
html/www/rav/
$> pwd|rev|awk -F \/ '{print $1}'  
html
$> pwd|rev|awk -F \/ '{print $1}'|rev  
html

Con sed

El siguiente ejemplo es con la utileria sed, donde la salida de pwd es analizada por sed a través de una expresión regular algo compleja, y por lo tanto no muy práctica pero muy ilustrativa del poder de este programa:

$> pwd
/var/www/html
$> pwd | sed 's,^\(.*/\)\?\([^/]*\),\2,'
html

Para entender como trabaja este expresión regular, es más fácil entenderla sin el caracter de escape '\' que se requiere para escapar caracteres especiales como '('.

sed 's,^(.*/)?([^/]*),\2,'

La 's' indica substitución de un patrón por otro, después buscara dos patrones y esta indicado de la primera ',' a la segunda ','. El primer patrón ^(.*/)? buscara desde el inicio de la línea hasta la última ocurrencia que encuentre de '/', el segundo patrón ([^/]*) buscará a partir de de donde se quedó el primero y al estar entre corchetes [^/] indica que encuentre todo lo que haya menos '/', es decir, efectivamente la última serie de caracteres después de la última '/' que sería el directorio actual de trabajo. Por último, en la parte de la substitución se hace referencia a '\2' lo que en sed se conoce como backreferences, o referencias anteriores, son 9 y se numeran \1, \2, etc. En este caso como tenemos dos patrones, hacemos referencia al segundo que sería nuestro resultado final.


Como se podrá observar, hay varias formas de llegar a lo mismo en Linux. Y esta característica es lo que lo hace un sistema operativo muy potente.



¿Requieres de una instalación o configuración de Linux o sus servicios?
¿Un desarrollo WEB empresarial a la medida?
¿Un curso o capacitación a la medida?
Revisa el sitio de SERVICIOS de LinuxTotal

LinuxTotal en:

Si encuentras útil la información que proveé LinuxTotal, considera realizar un donativo que estimule a seguir proporcionando contenido de calidad y utilidad. Gracias.


Dona a través de paypal::


O a través de bitcoins:


14TNQv5wM3xkSv65gHGQ6s6f8yTZuFTohE
Más artículos de LinuxTotal

Aqui, traté de enviar un archivo ejecutable (notepad.exe) a través de gmail, y sus mecanismos de seguridad me lo impidieron. Gma....


vi es el venerable y confiable editor de texto que encontrarás en TODAS las distintas versiones, distribucciones, sabores de Linu....


awk o la versión GNU gawk es más que un simple comando de procesamiento de patrones, es todo un lenguaje de análisis semántico....


Observa la imagen siguiente, que corresponde a uno de los sitios de descargas de MySQL y notarás que todos los archivos que puede....


Una buena contraseña o password, todos lo sabemos, es esencial para dificultar la entrada a nuestro sistema, sobre todo si se es ....


Como montar imágenes ISO en Linux.....


Imaginémonos a la empresa "Pato, S.A." que ofrece a sus empleados y clientes el sitio http://www.pato.com/consulta, donde mediant....


El siguiente es un script muy básico de iptables que puedes usar para proteger un solo equipo conectado a Internet a través de u....


Uno de mis clientes tiene múltiples aplicaciones basadas en VisualBasic 6 y como base de datos Access, que se ejecutan directamen....


¿Olvidaste o perdiste la contraseña del usuario 'root' de MySQL?, no hay problema, solo sigue estás sencillas instrucciones y p....



Copyright © LinuxTotal.com.mx 2006-2024
info@linuxtotal.com.mx · linuxtotal.com.mx@gmail.com