GNU/Linux >> Tutoriales Linux >  >> Linux

Ejecutar scripts desde otro directorio

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.


Linux
  1. ¿Cómo mover todos los archivos (incluidos los ocultos) de un directorio a otro?

  2. ¿En qué shell me estoy ejecutando?

  3. ¿Matrices asociativas en scripts de Shell?

  4. ¿Bloqueo correcto en scripts de Shell?

  5. Su Options – ¿Ejecutar comando como otro usuario?

¿Permitir Setuid en scripts de Shell?

¿Ejecutar scripts de Bash al ingresar a un directorio?

¿Cómo copiar un archivo de otro directorio al actual?

Matrices en scripts de Shell

¿Cómo usar if-else en Shell Scripts?

¿Cómo modificar /etc/hosts desde scripts de shell?