Cómo permitir que un script sea ejecutado por cualquier persona en cualquier lugar

Este tema ya se discutió, pero cada publicación que he leído me confunde aún más.

Por ejemplo, tome este script simple de bash hello world llamado test. Lo creé como el usuario Bill e hice una chmod 755 test para hacerlo ejecutable. El script reside en /home/Bill/scripts e intenté exportar PATH=$PATH:/home/Bill/scripts

Mientras estoy en ese directory, puedo ejecutar bien el script usando ./test . Pero si return a /home/Bill obtengo un "-bash: ./test: ningún file o directory"

Y si cambio a la raíz, no puedo encontrar el script a pesar de que lo he agregado a la ruta de mi entorno o creo que lo hice usando el command de export.

También he leído que puedo agregar la ruta del script en mi /etc/sudoers y no sudo ./test ninguna contraseña, pero esto requiere que el usuario ejecute sudo ./test . ¿Hay alguna forma de hacer que este script sea universalmente accesible y ejecutable desde cualquier usuario en cualquier lugar?

Como otra nota al margen, estoy un poco confundido sobre la diferencia entre ./test vs test ./test el script como test pero cuando yo o cualquier otro usuario lo ejecuta lo ejecuta como ./test o simplemente test

Puede ejecutar una secuencia de commands especificando una ruta (relativa o absoluta) a la secuencia de commands, o asegurando que el directory que contiene la secuencia de commands está en la búsqueda $PATH su shell.

Temporalmente ignorando el hecho de que la test no es un buen nombre para este ejemplo, ya que hay otras test tu caparazón puede elegir ejecutar, siempre puedes ejecutar la secuencia de commands por test nombre si el directory que contiene está en tu $PATH . Esto es lo que ha hecho con export PATH=$PATH:/home/Bill/scripts . En la terminal en la que ha establecido $PATH , puede ejecutar la test independientemente de su directory de trabajo actual.

Si el script no está en $PATH , o si desea especificar explícitamente qué test desea ejecutar, puede proporcionar no solo el nombre del file, sino una ruta relativa o absoluta al file. Entonces, de nuevo, independientemente de su directory de trabajo actual, siempre puede ejecutar el script al proporcionar la ruta completa: /home/Bill/scripts/test .

También puede ejecutar el script proporcionando una ruta relativa; para algunos ejemplos, donde el prompt indica su directory de trabajo:

 /home/Bill/scripts$ ./test /home/Bill$ scripts/test /home/Bill/documents$ ../scripts/test /home/James/documents$ ../../Bill/scripts/test 

El motivo por el que recibe un error cuando intentó ejecutar

 /home/Bill$ ./test 

es porque no hay file /home/Bill/test , que es lo que está intentando ejecutar ("la test file en el directory actual").


Si desea que todos los usuarios puedan ejecutar el script simplemente con su nombre, sin dar una ruta de acceso absoluta o relativa al script, debe estar en $PATH . Puede hacer esto haciendo que cada usuario agregue /home/Bill/scripts a su $PATH , o colocando el script en una location que está en $PATH por defecto para todos los usuarios, como /usr/local/bin . Pero tendrá que llamar a su script algo diferente a la test , porque la test es un caso especial: es un command integrado de shell.

Nombrar una "testing" de script no es una buena idea porque ya hay un command de "testing":

 testing de escritura
 testing es un shell incorporado

Además de esto, la variable PATH siempre funciona para encontrar un progtwig o script. Así que coloca la ruta de tu script en PATH con

 PATH de export = / your / place / to / directory_of_script: $ PATH

hará que su script sea accesible. ¡Pero no use nombres de shell incorporado o nombres de progtwigs o scripts ya existentes!