Tengo una pieza de software que requiere /bin/shser Bash, pero para Ubuntu el valor predeterminado es Dash y quiero mantenerlo predeterminado; No quiero cambiarlo a Bash de forma permanente.
¿Hay alguna manera de cambiarlo solo para una sesión de terminal en ejecución? Entonces, ¿un programa que se ejecute en este terminal verá /bin/shvinculado a bash pero el resto del sistema seguirá viendo Dash? ¿O puedo engañar al software para que lo vea /bin/shcomo Bash aunque no lo sea?
No escribí este software y piratearlo para usarlo en /bin/bashlugar de /bin/shno es realmente una opción.
command-line
bash
sh
corwin
fuente
fuente

/bin/shquebashes un error y causa problemas reales (como lo está descubriendo). Si nadie se queja, es posible que nunca se cambie.Respuestas:
Dos respuestas ya sugieren monturas chrooting y bind, y hay una tercera opción estrechamente relacionada: montar espacios de nombres . Con el
unshareprograma , puede crear un nuevo espacio de nombres de montaje, y los montajes dentro de este espacio de nombres no afectarán a otros espacios de nombres.Por ejemplo, en una terminal, hago:
Y en otro:
Entonces podría ejecutar este programa inflexible en su propio espacio de nombres de montaje.
fuente
Si es un guión, simplemente llame al guión como
No es necesario cambiar los enlaces en absoluto.
Para el ejecutable compilado, puede ir a la ruta chroot:
Y luego ejecuta tu programa o
sudo chroot rootfs /yourprogramSin embargo, en la práctica no hay ninguna razón por la que no pueda usarlo
/bin/bashcomo enlace simbólico/bin/sh. De hecho, antes de la versión 6.10, Ubuntu usaba/bin/bashcomo/bin/sh, y luego cambiaron debido a/bin/shuna implementación mucho más rápida y ágil de POSIX/bin/sh(es decir, se adhiere al estándar POSIX sobre cómo deberían comportarse las utilidades del sistema operativo y el sistema operativo tipo Unix y implementar algunos de sus componentes internos), y debido a razones de portabilidad. Recomiendo leer la respuesta de Gilles también para notas históricas sobre cómo/bin/dashsurgió. En cuanto a la compatibilidad, los scripts escritos paradashusar las funciones POSIX se ejecutarán conbashun shell predeterminado perfectamente bien. Por lo general, es al revés lo que causa problemas:bashtiene características que no son necesarias/bin/sh, como la<<<sintaxis o las matrices.Además, el comando en cuestión probablemente esté escrito con RHEL o CentOS en mente, que se utiliza
/bin/bashcomo un enlace simbólico para/bin/sh, sugiere dos cosas: probablemente apuntaron a un sistema operativo específico y no se adhirieron a los principios POSIX. En ese caso, también sería una buena idea verificar qué otras cosas requiere el comando, ya que si realmente está escrito con otro sistema operativo en mente, podría tener más problemas que simplemente volver a vincular/bin/sh.fuente
lnocp -l).mount --rbind --make-rslavelugar decp -r. También se puede hacer de solo lectura. Tambiénsudo chrootejecuta el script como root, lo que podría no ser óptimo.Una posibilidad sería un montaje de enlace de un solo archivo. Para ello, se monta el archivo
/bin/bashsimplemente sobre/bin/dashlo quebashtipo de cubiertas o cuerosdash. Estos son los pasos (incluido el reverso):Sin embargo, no intenté ocultar
mount --bind /bin/bash /bin/shdirectamente el enlace simbólico. El truco anterior solo hace que bash y dash sean idénticos, por lo que se refiere a aunque apunta . Además, esta es una solución para todo el sistema, no solo para la ventana de terminal actual.mountshbashdashDebo confesar que esto podría ser excesivo y que simplemente cambiar el enlace simbólico temporalmente es mucho más fácil. Solo quería mostrar otra forma posible.
fuente
Debería poder cambiarlo solo para la sesión actual utilizando un alias. Antes de ejecutar su comando en la terminal:
Esto será temporal y solo estará activo en el terminal desde el que se ejecutó.
SIN EMBARGO: Esto NO FUNCIONARÁ si su script usa rutas absolutas.
Desafortunadamente, "piratear" el script podría ser su única opción. Por convo con @vanadium, puede crear un script de envoltura como este:
Sin embargo, durante la duración de su script, es mejor que no espere que nada en su sistema requiera un guión explícito.
fuente