Tengo algunos scripts funcionales y quiero copiarlos /usr/bin. Quiero usarlos como comandos de terminal normales. ¿Es una buena práctica usarlos con la .shextensión o puedo guardarlos sin extensión?
Además, si desea que esos scripts estén disponibles para todos los usuarios, /usr/local/binpuede ser una mejor opción.
Salem
66
@Salem /usr/biny /usr/local/binambos deberían estar disponibles para todos los usuarios, pero /usr/local/bines mejor para los ejecutables que no forman parte de los paquetes.
gerrit
El único beneficio que he visto es que los editores como vim o nano saben cómo resaltar desde el principio, y eso es todo.
rath
1
@rath Obtengo resaltado de sintaxis sin la extensión si tengo el shebang establecido en #!/usr/bin/env basho #!/bin/bash.
Sparhawk
@Sparhawk De hecho, pero a menudo lo olvido hasta que trato de ejecutar el script;)
rath
Respuestas:
71
No, no es una buena práctica, debe mantener sus scripts sin extensión. Tenga en cuenta que los scripts que forman parte de los paquetes no tienen una extensión .sh , es decir, update-grub , no update-grub.sh . Si aún no está convencido, tenga en cuenta que la Guía de estilo de Google Shell dice:
Los ejecutables no deben tener extensión (muy recomendable) o una extensión .sh. Las bibliotecas deben tener una extensión .sh y no deben ser ejecutables.
PD No tienes que poner tu guión /bin. Puedes crear un directorio ~/biny poner tu script allí. El directorio ~/binestá incluido $PATHde forma predeterminada, por lo que los scripts que se colocan allí se pueden ejecutar como cualquier otro comando de shell.
"El directorio ~ / bin está incluido $PATHpor defecto" - ¿Desde cuándo? De todos modos, ~/.local/bines probablemente una mejor opción, ya que es un estándar.
nyuszika7h
1
¿Quieres decir que "las bibliotecas deben tener una extensión .so", verdad? No sh.
Keith Wolters
3
@KeithWolters primero, no yo, sino Google. En segundo lugar, .sh, no .so, estamos hablando de scripts de shell, no de binarios.
1
La guía de estilo de Google es muy específica para Google. Por ejemplo, "Bash es el único lenguaje de scripting de shell permitido para ejecutables". Claramente una regla interna en lugar de mejores prácticas.
Paul Draper
1
@ nyuszika7h echa un vistazo a ~ / .profile ... inserta $ HOME / bin en tu ruta si el directorio existe
Corey Goldberg
9
Secundo la recomendación de usar ~/binque se agrega automáticamente a tu $PATH, como dijo Sergey . O /usr/local/bin, que ya puede estar en el PATH. Sin embargo:
Estás haciendo esto por ti mismo. Use lo que le resulte más cómodo. De hecho, diría que conserve la extensión para que se le recuerde que es su script el que está ejecutando, ya que:
Las extensiones son poco comunes en /usr/bin. En mi sistema, solo puedo encontrar dos:
/usr/local/bin
puede ser una mejor opción./usr/bin
y/usr/local/bin
ambos deberían estar disponibles para todos los usuarios, pero/usr/local/bin
es mejor para los ejecutables que no forman parte de los paquetes.#!/usr/bin/env bash
o#!/bin/bash
.Respuestas:
No, no es una buena práctica, debe mantener sus scripts sin extensión. Tenga en cuenta que los scripts que forman parte de los paquetes no tienen una extensión .sh , es decir, update-grub , no update-grub.sh . Si aún no está convencido, tenga en cuenta que la Guía de estilo de Google Shell dice:
PD No tienes que poner tu guión
/bin
. Puedes crear un directorio~/bin
y poner tu script allí. El directorio~/bin
está incluido$PATH
de forma predeterminada, por lo que los scripts que se colocan allí se pueden ejecutar como cualquier otro comando de shell.fuente
$PATH
por defecto" - ¿Desde cuándo? De todos modos,~/.local/bin
es probablemente una mejor opción, ya que es un estándar.Secundo la recomendación de usar
~/bin
que se agrega automáticamente a tu$PATH
, como dijo Sergey . O/usr/local/bin
, que ya puede estar en elPATH
. Sin embargo:Las extensiones son poco comunes en
/usr/bin
. En mi sistema, solo puedo encontrar dos:Entonces, si está empacando, definitivamente omita la extensión.
fuente
~/bin
se agrega$PATH
automáticamente si existe, no es necesario agregarlo manualmente. Simplemente cree el directorio, cierre la sesión y vuelvaSimplemente ponga la siguiente línea en la parte superior del archivo:
Entonces, ese archivo se escribirá automáticamente: Shell Script sin ninguna extensión.
Recuerde dar permiso de ejecución para presentar.
Para poner el script de manera que pueda ejecutarse mediante un comando directo, visite: ¿Dónde debo colocar mi script para que pueda ejecutarlo mediante un comando directo?
fuente