sh /path/to/script generará un nuevo shell y ejecutará el script independientemente de su shell actual. El source
(.) El comando llamará a todos los comandos en el script en el shell actual. Si el script llama a exit
por ejemplo, perderá el shell actual. Debido a esto, generalmente es más seguro llamar a los scripts en un shell separado con sh o ejecutarlos como archivos binarios usando el full (comenzando con /
) o ruta relativa (./
). Si se llaman como binarios, se ejecutarán con el intérprete especificado (#!/bin/bash
, por ejemplo).
En cuanto a saber si un script encontrará o no los archivos que necesita, no hay una buena respuesta, aparte de mirar el script para ver qué hace. Como opción, siempre puede ir a la carpeta del script en un subproceso sin salir de su carpeta actual:
(cd /wherever/ ; sh script.sh)
Definitivamente puedes hacer eso (con los ajustes que otros mencionaron como sudo sh /pathto/script.sh
o ./script.sh
). Sin embargo, hago una de algunas cosas para ejecutarlos en todo el sistema para no preocuparme por los directorios y ahorrarme tipeo extra inútil.
1) Enlace simbólico a /usr/bin
ln -s /home/username/Scripts/name.sh /usr/bin/name
(Asegúrese de que no haya ningún nombre superpuesto allí, porque obviamente lo anularía). Esto también me permite mantenerlos en mis carpetas de desarrollo para que pueda ajustarlos según sea necesario.
2) Agregue el directorio Scripts a su ruta (usando .bash_profile - o cualquier perfil que tenga en su shell)
PATH=/path/to/scripts/:$PATH
3) Crear Alias en el .bash_profile
en ~/.bash_profile
agrega algo como:
alias l="ls -l"
Como puede ver, la sintaxis es solo un alias, dígitos que desea que actúen como un comando, el comando. Así que escribir "l" en cualquier parte de la terminal daría como resultado ls -l
Si quieres sudo, simplemente alias sl="sudo ls -l"
para notar a sí mismo l vs sl (como un ejemplo inútil).
De cualquier manera, puede escribir sudo nameofscript
y sigue tu camino. No hay necesidad de meterse con ./ o . o sh, etc. Solo márcalos como ejecutables primero :D
Normalmente hago lo que dices
sh /path/to/script
Y ejecutarlo como root/superusuario
sudo sh /path/to/script
Su directorio actual solo importa si los scripts asumen que está en la misma carpeta que él. Asumiría que la mayoría de los scripts no hacen esto y usted puede ejecutarlo como se indica arriba.