Introducción a Bash para desarrolladores de WordPress
De vez en cuando, termino instalando una pieza de software a través de Composer o que coloca algunos de sus archivos binarios en directorios distintos de los lugares habituales en los que macOS espera encontrarlos.
Es decir, si está ejecutando una aplicación desde la Terminal o si una aplicación con una GUI espera estar en una determinada ubicación en el disco, es probable que la espere en uno de cinco lugares:
- /usr/bin
- /compartimiento
- /usr/sbin
- /sbin
- /usr/local/bin
Pero, como dije, con el tiempo terminamos instalando cosas usando herramientas de terceros, o terminamos instalando cosas que colocan archivos binarios fuera de uno de estos directorios.
Caso en cuestión: ¿Qué sucede si desea instalar WP-CLI globalmente? ¿O qué sucede si desea utilizar una versión de MySQL que se envía con MAMP?
En esos casos, esos binarios no van a ser incluidos en ninguno de los directorios mencionados. Cuando eso sucede, tienes que modificar tu perfil. Si nunca has hecho eso, puede ser desalentador. Y puede complicarse si no lo hace metódicamente con el tiempo.
Así que aquí hay una introducción a Bash para desarrolladores de WordPress sobre qué es su bash_profile y cómo administrar software de terceros con él.
Bash para desarrolladores de WordPress
Antes de entrar en la configuración de rutas, para otro software y similares, es importante tener en cuenta que es posible que no tenga un bash_profile. Es decir, si usa una terminal, entonces puede usar un tipo diferente de shell, y si ese es el caso, ya está muy por delante de esta publicación.
Si, por otro lado, usa el terminal shell sin cambios que se envía con macOS. Pero primero, ¿qué es un caparazón?
En informática, un shell es una interfaz de usuario para acceder a los servicios de un sistema operativo. En general, los shells del sistema operativo utilizan una interfaz de línea de comandos (CLI) o una interfaz gráfica de usuario (GUI), según la función de la computadora y la operación particular.
Y si está usando Terminal sin modificaciones, entonces probablemente esté usando Bash.
Finalmente, todas las configuraciones para cada vez que inicia Terminal se almacenan en el archivo de perfil relevante del shell. En este caso, todo se almacena en .bash_profile.
Para configurar todo exactamente como lo necesitamos, debemos hacer algunos cambios (o incluso inicializarlo) para que todo funcione.
Tenga en cuenta que después de cada cambio realizado en .bash_profile, es posible que desee ejecutar:
$ source ~/.bash_profile
Entonces, todos los nuevos cambios que se introducen se cargan para su sesión de terminal actual.
El perfil inicial
Cada vez que configuro mi perfil inicial, siempre se ve igual. Es decir, incluye los cinco directorios que he enumerado anteriormente :
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:$PATH"
export PATH
Sin embargo, notará que al final de la variable PATH hay algo que se parece a otra variable. Específicamente, estoy hablando de $PATH. Y es importante comprender esto porque afecta la forma en que se encuentran los programas dentro de la terminal.
¿Qué es $PATH?
Primero, piense que era una forma en que el shell o el sistema operativo buscaban binarios. Entonces, si tiene las cinco rutas definidas anteriormente, el sistema operativo buscará en esos directorios ciertos archivos binarios.
Para probarlo, inicie la terminal y escriba:
$ which clear
Y esto le mostrará dónde encuentra el ejecutable clear en su sistema (donde clear solo borra la pantalla de la terminal 🙂).
A continuación, observe que $PATH se define al final de la cadena en el ejemplo anterior. A medida que modifique su perfil, le gustará trabajar con él. En resumen, define el orden en que se deben buscar los directorios.
Entonces, en la esencia anterior, la Terminal buscará un binario que coincida con lo que está buscando ejecutar comenzando en /usr/bin y terminando en /usr/local/bin.
¿Qué significa "exportar"?
Si no está utilizando Bash, no puedo comentar sobre el equivalente, pero dentro del contexto de Bash, exportar es una forma de asignar explícitamente el valor a la variable PATH definida en la esencia anterior.
Es decir, en programación estamos acostumbrados a crear una variable y asignarle un valor. Esto es similar a eso. Sin embargo, somos un poco más explícitos. En pocas palabras, estamos configurando una variable en el lado izquierdo al valor en el lado derecho. Y esto se establece usando export.
Entonces, si desea ver qué contiene $PATH, escriba esto en su terminal:
$ echo $PATH
Entonces vería el valor de las cinco rutas definidas hasta ahora.
Sin embargo, con el tiempo, naturalmente queremos agregar más a esto.
Paquetes para compositores
He hablado sobre la instalación de Composer y cómo instalar paquetes usándolo en publicaciones anteriores a nivel mundial. Pero digamos que, por el bien del argumento, queremos instalar WP-CLI y luego agregarlo de manera que se pueda acceder a través de la terminal en cualquier parte de nuestro sistema. Y todo esto se puede hacer utilizando la información de perfil anterior.
Suponiendo que haya instalado composer y su composer.json se vea así (junto con algunas otras cosas, pero ignórelas por ahora):
{
"require": {
"squizlabs/php_codesniffer": "2.9.1",
"wp-cli/wp-cli": "~1.2.1",
"psy/psysh": "~0.8.6"
}
}
Y has corrido:
$ composer update
Luego se ha instalado WP-CLI. Pero cuando intenta ejecutarlo desde la terminal fuera de su directorio de instalación, no funciona. Entonces, ¿qué da?
La ruta a los archivos binarios instalados a través de composer no está configurada en nuestro .bash_profile. Para solucionar esto, agregue una nueva línea a .bash_profile pero asegúrese de no redefinir algo que ya existe.
Es decir, dado que PATH existe, entonces podemos establecer $PATH al final de nuestra nueva línea y anteponer nuestro directorio Composer. De esta manera, no duplicamos directorios o valores en la variable cada vez que los exportamos y establecemos la prioridad de qué directorios se buscan.
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
PATH="$HOME/.composer/vendor/bin:$PATH"
export PATH
Luego, cuando intente ejecutar wp desde cualquier lugar de la línea de comandos, debería funcionar y debería poder escribir:
$ which wp
Y vea que proviene del directorio composer/vendor/bin. Ah, y tenga en cuenta que $HOME es una variable que hace referencia al directorio de inicio del usuario actual. Esto se puede cambiar, pero está fuera del alcance de esta publicación.
Software MAMP
En este punto, la versión de PHP, MySQL o cualquier idioma y herramienta que elijas cambiará. He proporcionado algunas publicaciones diferentes sobre MAMP (1, 2, 3 ), así que eso es lo que estoy optando por usar como ejemplo.
Específicamente, quiero usar la versión de PHP y MySQL de MAMP, no la que se proporciona con el sistema. Pero, en este punto, puedes ejecutar:
$ which php
Y:
$ which mysql
Y vea que ambos provienen de directorios del sistema. Esto debe cambiarse para que nuestro acceso a la línea de comandos use la misma versión del software que usa nuestra aplicación.
Para hacer esto, podemos agregar las siguientes líneas a nuestro .bash_profile :
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
PATH="$PATH:$HOME/.composer/vendor/bin"
PATH="/Applications/MAMP/bin/php/php7.1.0/bin:$PATH"
export PATH
Sin embargo, hay algo que se debe tener en cuenta aquí: he colocado el directorio binario de PHP de MAMP antes de los valores de $PATH. Esto se debe a que quiero que el sistema busque aquí primero (no en los directorios del sistema).
Sin embargo, hay un segundo desafío. MAMP se envía con varias versiones diferentes de PHP y las probabilidades de que queramos usar la misma versión cada vez son escasas. Entonces, necesitamos una forma de usar cualquier versión seleccionada en MAMP, ¿verdad?
Una forma de hacer esto es usar un alias.
¿Qué pasa con los alias?
Puede pensar en los alias como un atajo: es una forma rápida de ejecutar un comando o programa en particular sin tener que escribir un nombre completo para un programa.
En el caso de MAMP y PHP, hay algunas versiones de PHP que podríamos estar usando. En el momento de escribir este artículo, tengo:
- 5.4.45
- 5.5.38
- 5.6.28
- 7.0.13
- 7.1.0
Todo disponible en mi sistema. No es probable que quiera usarlos todos (ni tenerlos todos en mi $PATH ), pero puede haber una posibilidad de que quiera ejecutar una versión anterior de PHP para probar algo en particular.
Entonces, ¿cómo podemos hacer eso? Podemos usar alias. Y si navega a /Aplicaciones/MAMP/bin/php , debería ver todas las versiones de PHP que se incluyen con su versión de MAMP.
Ahora configuraremos alias para cada uno de estos:
## Aliases to old versions of PHP.
alias php54="/Applications/MAMP/bin/php/php5.4.45/bin/php"
alias php55="/Applications/MAMP/bin/php/php5.5.38/bin/php"
alias php56="/Applications/MAMP/bin/php/php5.6.28/bin/php"
alias php70="/Applications/MAMP/bin/php/php7.0.13/bin/php"
Y podemos ejecutar cada uno de ellos independientemente del otro en la terminal ejecutando un comando como:
$ php54 -v
Esto debería mostrarle qué versión de PHP se está ejecutando según el alias que definió en .bash_profile.
Y finalmente, tenga en cuenta que en la esencia final verá una línea que se agregó a .bash_profile :
source ~/.profile
Esto lo hace automáticamente el sistema específicamente cuando comienza a trabajar con un shell interactivo. Puede eliminarlo, pero se agregará nuevamente en la parte superior del archivo, así que no se preocupe.
Y, como referencia, la versión final de mi .bash_profile se ve así :
source ~/.profile
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin" # The standard system binaries
PATH="$HOME/.composer/vendor/bin:$PATH" # Composer binaries
PATH="/Applications/MAMP/bin/php/php7.1.0/bin:$PATH" # MAMP's PHP7 loaded first
PATH="/Applications/MAMP/Library/bin:$PATH" # MAMP's MySQL loaded first
## Aliases to old versions of PHP.
alias php54="/Applications/MAMP/bin/php/php5.4.45/bin/php"
alias php55="/Applications/MAMP/bin/php/php5.5.38/bin/php"
alias php56="/Applications/MAMP/bin/php/php5.6.28/bin/php"
alias php70="/Applications/MAMP/bin/php/php7.0.13/bin/php"
export PATH
Verá que también he agregado líneas para MySQL y MySQLAdmin justo encima de la línea que define los alias (aunque es probable que el suyo se vea diferente).
De todos modos, esta es una idea general, aunque es probable que la tuya se vea diferente.
Fiesta más avanzada
Hay personas que son mucho más avanzadas en Bash que yo (e incluso navegar por otros sitios sobre lo que algunas personas han hecho puede ser impresionante).
Pero si usted es un desarrollador de WordPress con poco o ningún conocimiento práctico de Bash, herramientas de línea de comandos, configuración de rutas, etc., entonces esto es algo que debería ser una referencia de trabajo y un buen punto de partida.



