GNU/Linux >> Tutoriales Linux >  >> Linux

¿Es correcto usar /bin/sh en el Hashbang si Bourne Shell no está disponible en una distribución?

Generalmente, los scripts de shell contienen el siguiente comentario en la primera línea del archivo de script:#!/bin/sh . Según las investigaciones que realicé, esto se llama “hash bang” y es un comentario convencional. Este comentario informa a Unix que este archivo es ejecutado por Bourne Shell en el directorio /bin .

Mi pregunta comienza en ese punto. Hasta ahora no he visto este comentario como #!/bin/bash . Siempre es #!/bin/sh . Sin embargo, las distribuciones de Ubuntu no tienen el programa Bourne Shell. Tienen el Bourne Again Shell (bash).

En ese punto, ¿es correcto colocar el comentario #!/bin/sh en scripts de shell escritos en distribuciones de Ubuntu?

Respuesta aceptada:

#!/bin/sh debería funcionar en todas las distribuciones Unix y similares a Unix. En general, se considera que es el hashbang más portátil, siempre que su secuencia de comandos se mantenga compatible con POSIX. El /bin/sh Se supone que shell es un shell que implementa el estándar de shell POSIX, independientemente de cuál sea el shell real que se hace pasar por /bin/sh concha.

#!/bin/sh normalmente es solo un enlace ahora que el shell de Bourne ya no se mantiene. En muchos sistemas Unix /bin/sh será un enlace a /bin/ksh o /bin/ash , en muchos sistemas Linux basados ​​en RHEL será un enlace a /bin/bash , sin embargo, en Ubuntu y muchos sistemas basados ​​en Debian es un enlace a /bin/dash . Todos los shells, cuando se invocan como sh , entrará en el modo de compatibilidad con POSIX.

Sin embargo, el hashbang es un marcador de posición importante porque permite una portabilidad mucho mayor que otros métodos, siempre que su script sea estrictamente compatible con POSIX (repetido para enfatizar la importancia).

Nota:cuando bash se invoca en modo POSIX, aún permitirá algunas cosas que no son POSIX como [[ , arreglos y más. Esas cosas pueden fallar en un no bash sistema.


Linux
  1. ¿Cuál es el uso del comando ‘/usr/bin/[‘ [Corchete] en Linux?

  2. ¿Por qué es mejor usar “#!/usr/bin/env Name” en lugar de “#!/path/to/name” como Shebang?

  3. /usr/bin Vs /usr/local/bin ¿En Linux?

  4. ¿Alguna razón para tener un Shebang apuntando a /bin/sh en lugar de /bin/bash?

  5. ¿Por qué /bin/sh apunta a /bin/dash y no a /bin/bash?

Instalar binarios en /bin, /sbin, /usr/bin y /usr/sbin, interacciones con --prefix y DESTDIR

¿Cuál es la diferencia entre #!/usr/bin/env bash y #!/usr/bin/bash?

cmake --version apunta a /usr/bin/cmake mientras que cmake apunta a /usr/local/bin

¿Cuáles son los significados de /usr/sbin, /usr/local/sbin y /usr/local/bin?

¿Cuándo debo usar #!/bin/bash y cuándo #!/bin/sh?

Se movió el contenido de /bin a /usr/bin, ¿es posible deshacerlo?