Otra forma es llamar al intérprete y pasarle la ruta al script:
/bin/sh /path/to/script
El punto y la fuente son equivalentes. (EDITAR: no, no lo son: como KeithB señala en un comentario sobre otra respuesta, "." Solo funciona en shells relacionados con bash, donde "source" funciona en shells relacionados con bash y csh). Ejecuta el script en -place (como si hubiera copiado y pegado el script allí). Esto significa que las funciones y variables no locales en el script permanecen. También significa que si el script hace un CD en un directorio, todavía estará allí cuando esté listo.
Las otras formas de ejecutar un script lo ejecutarán en su propia subshell. Las variables en el script aún no están vivas cuando se hace. Si el script cambió de directorio, entonces no afecta el entorno de llamada.
/ path / to / script y / bin / sh script son ligeramente diferentes. Típicamente, un script tiene un "shebang" al principio que se ve así:
#! /bin/bash
Este es el camino hacia el intérprete de guiones. Si especifica un intérprete diferente que cuando lo ejecuta, puede comportarse de manera diferente (o puede no funcionar en absoluto).
Por ejemplo, los scripts de Perl y Ruby comienzan con (respectivamente):
#! /bin/perl
y
#! /bin/ruby
Si ejecuta uno de esos scripts ejecutando /bin/sh script
, entonces no funcionarán en absoluto.
Ubuntu en realidad no usa el shell bash, sino uno muy similar llamado dash. Las secuencias de comandos que requieren bash pueden funcionar un poco mal cuando se llama haciendo /bin/sh script
porque acaba de llamar una secuencia de comandos bash utilizando el intérprete de guiones.
Otra pequeña diferencia entre llamar al script directamente y pasar la ruta del script al intérprete es que el script debe estar marcado como ejecutable para ejecutarlo directamente, pero no para ejecutarlo pasando la ruta al intérprete.
Otra variación menor: puede prefijar cualquiera de estas formas de ejecutar un script con eval, por lo tanto, puede tener
eval sh script
eval script
eval . script
y así. En realidad no cambia nada, pero pensé que lo incluiría por minuciosidad.