Respuestas:
[…] Uno de ellos debe tener un
/bin/sh
enlace simbólico/bin/bash
.
Sospecho que el estado actual de las cosas es:
[...] uno de ellos tiene algunos scripts de shell mal escritos con Bashisms, y no quiere arreglar scripts de xyr mal.
No puede hacer un enlace simbólico por usuario, obviamente. Por lo tanto, haga que su usuario obtenga esos Bashisms de cualquier script de shell que use /bin/sh
como su intérprete, y que ponga /bin/bash
(o las alternativas mencionadas por piernov) en cualquier script de shell donde el shell Bourne Again realmente se supone que es el intérprete de script.
Estas secuencias de comandos, si suponen que sh
solo es el shell Bourne Again o si se basan en Bashisms y de hecho no invocan el shell Bourne Again como bash
(Incluso invocarlo como sh
incorrecto si uno quiere un número justo de Bashisms .), están rotos y deben repararse.
/bin/sh
. Ubuntu wiki./bin/sh
. Wiki de Debian./bin/sh
es solo un shell Bourne. Tanto dash como bash pueden actuar como shells compatibles con sh, y dado que el shell Bourne original ya no se usa, sh es a menudo un enlace simbólico a bash o dash (principalmente en Ubuntu), o incluso zsh.
Sin embargo, cuando use sh, no debe usar ninguna especificidad de un shell en particular. Es por eso que un script con un #!/bin/sh
shebang no debería depender de ningún bashismo, por ejemplo. Cuando se hace referencia alguna particularidad de fiesta, se debe utilizar #!/usr/bin/env bash
. Eso es para un shell utilizado para ejecutar scripts.
Otro aspecto del shell es el símbolo del sistema utilizado por un usuario. La mayoría de las veces se define en /etc/passwd
, y la elección es a discreción de la distribución que está utilizando. Si el valor predeterminado es usar guión, obviamente puede cambiar la línea /etc/passwd
para un usuario específico y poner /usr/bin/bash
.
Finalmente, incluso si no es una buena idea, si realmente desea sh
que se ejecute el comando bash
, si está en un shell, debería poder alias
hacerlo, o crear un enlace simbólico en otro directorio ( ~/bin
por ejemplo) y luego agregarlo a la RUTA ( export PATH="~/bin:${PATH}"
)
/bin/sh
generalmente no es el shell Bourne en sí mismo, sino un enlace a otro shell que se adhiere a la especificación POSIX, que se basa pero no es idéntico al shell Bourne original.