Muy bien chicos, intento instalar rvm en un contenedor docker basado en ubuntu:14.04. Durante el proceso, descubrí que algunas personas hacen algo como esto para asegurarse de que los comandos de Docker también se ejecuten con bash:
RUN ln -fs /bin/bash /bin/shAhora pasa la rareza y espero que alguien de ustedes me lo pueda explicar:
→ docker run -it --rm d81ff50de1ce /bin/bash root@e93a877ab3dc:/# ls -lah /bin .... lrwxrwxrwx 1 root root 9 Mar 1 16:15 sh -> /bin/bash lrwxrwxrwx 1 root root 9 Mar 1 16:15 sh.distrib -> /bin/bash ... root@e93a877ab3dc:/# /bin/sh sh-4.3# echo $0 /bin/sh ¿Alguien puede explicar qué está pasando aquí? Sé que podría prefijar mis comandos en el dockerfile con bash -c , pero me gustaría entender qué está sucediendo aquí y, si es posible, eliminar el prefijo bash -c en el dockerfile.
muchas gracias robin
Es porque bash tiene un modo de compatibilidad en el que intenta emular sh si se inicia con el nombre sh , como dice la página de manual:
Si bash se invoca con el nombre sh, intenta imitar el comportamiento de inicio de las versiones históricas de sh lo más fielmente posible, mientras también se ajusta al estándar POSIX. Cuando se invoca como un shell de inicio de sesión interactivo, o un shell no interactivo con la opción --login, primero intenta leer y ejecutar comandos desde /etc/profile y ~/.profile, en ese orden. La opción --noprofile se puede usar para inhibir este comportamiento. Cuando se invoca como shell interactivo con el nombre sh, bash busca la variable ENV, expande su valor si está definido y usa el valor expandido como el nombre de un archivo para leer y ejecutar. Dado que un shell invocado como sh no intenta leer ni ejecutar comandos desde ningún otro archivo de inicio, la opción --rcfile no tiene efecto. Un shell no interactivo invocado con el nombre sh no intenta leer ningún otro archivo de inicio. Cuando se invoca como sh, bash entra en modo posix después de leer los archivos de inicio.