Diferencia entre Sh y Bash
- ¿Qué es un shell?
- Cómo encontrar el shell actual
- Cómo encontrar las carcasas disponibles
-
El comando
sh
y su uso -
Bash
y su uso
Este tutorial explica qué es un shell, conociendo el shell utilizado actualmente, comprobando la lista de todos los shells disponibles y la diferencia entre sh
y bash
.
¿Qué es un shell?
Un shell es un programa de computadora que recibe comandos. También interpreta los comandos y los pasa al sistema operativo para su procesamiento. Actúa como una interfaz entre el usuario y el sistema operativo, a través de la cual el usuario puede interactuar con el sistema operativo.
La mayoría de los sistemas operativos Linux vienen con al menos un programa de shell único. El programa de shell será Bash
, Dash
o ambos.
Cómo encontrar el shell actual
Para conocer el shell que se está utilizando actualmente en un sistema Linux, podemos leer el archivo /etc/passwd
porque almacena la información de la cuenta del usuario. Ejecutemos el siguiente comando para conocer el shell actual.
El comando grep
se usa para buscar una cadena de caracteres en un archivo específico. El siguiente comando busca el usuario fumba
en el archivo passwd
ubicado en /etc
. Cuando el comando grep
encuentra una coincidencia, imprime la línea con el resultado.
$ grep fumba /etc/passwd
Podemos ver en la salida a continuación que el shell predeterminado para el usuario fumba
es bash.
fumba:x:1000:1000:,,,:/home/fumba:/bin/bash
Cómo encontrar las carcasas disponibles
Todos los shells disponibles en los sistemas Linux se enumeran en el archivo /etc/shells
. Usamos el comando cat
a continuación para mostrar el contenido del archivo /etc/shells
.
cat /etc/shells
El resultado a continuación muestra la lista de todos los shells disponibles en nuestro sistema.
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
/usr/bin/tmux
/usr/bin/screen
El comando sh
y su uso
sh
es un nombre de comando para el shell Bourne. Es el intérprete de lenguaje de comandos estándar para sistemas operativos similares a Unix. Ejecuta comandos desde una cadena de línea de comandos, la entrada estándar o un archivo especificado. sh
cumple con los estándares POSIX.
La interfaz de sistema operativo portátil (POSIX) es una familia de estándares especificados por IEEE Computer Society para mantener la compatibilidad entre sistemas operativos. Estos estándares ayudan a desarrollar software multiplataforma para múltiples sistemas operativos una vez que se siguen los estándares.
La mayoría de los sistemas tienen el archivo /bin/sh
, pero es un enlace simbólico y no invocará a sh
. En Ubuntu, /bin/sh
es un enlace simbólico al shell Dash
. Podemos verificar ejecutando el siguiente comando.
$ file -h /bin/sh
El resultado a continuación muestra que /bin/sh
es un enlace simbólico a guión
.
/bin/sh: symbolic link to dash
Agreguemos #!/bin/sh
a un script.
#!/bin/sh
printf "sh points to dash!\n"
El script anterior especifica /bin/sh
como intérprete. Sin embargo, dado que /bin/sh
apunta a dash
, el shell dash
ejecutará el script como intérprete.
Bash
y su uso
Bash
son las siglas de Bourne Again shell. Como sh
, es un procesador de lenguaje de comandos y un shell. Sin embargo, bash es un superconjunto de sh
. Es compatible con las funciones de sh
y proporciona más extensiones y funciones. Bash
es el shell predeterminado para los sistemas operativos Linux.
Al principio, Bash
se ajustaba a los estándares POSIX, pero dejó de seguir los estándares POSIX con el tiempo a medida que se añadían más funciones y extensiones. Sin embargo, bash aún se puede usar en modo POSIX configurando el indicador -posix
, como se muestra a continuación.
$ bash --posix
Escribamos un script bash que se ajuste al estándar POSIX.
#!/bin/bash
set -o posix
printf "we are using bash shell!\n"
El intérprete bash
ejecutará el script anterior ya que se ha especificado en la primera línea, #!/bin/bash
.
El comando set
habilita opciones en el script. En nuestro caso, permite que el shell bash ejecute el script en modo POSIX.