sh /path/to/script genererà una nuova shell ed eseguirà lo script lei indipendentemente dalla shell corrente. Il source
(.) Il comando chiamerà tutti i comandi nello script nella shell corrente. Se lo script chiama exit
ad esempio, perderai la shell corrente. Per questo motivo di solito è più sicuro chiamare gli script in una shell separata con sh o eseguirli come binari usando il full (che inizia con /
) o percorso relativo (./
). Se chiamati come binari, verranno eseguiti con l'interprete specificato (#!/bin/bash
, ad esempio).
Per quanto riguarda sapere se uno script troverà o meno i file di cui ha bisogno, non c'è una buona risposta, a parte guardare lo script per vedere cosa fa. Come opzione, puoi sempre andare alla cartella dello script in un processo secondario senza uscire dalla cartella corrente:
(cd /wherever/ ; sh script.sh)
Puoi sicuramente farlo (con le modifiche menzionate dagli altri come sudo sh /pathto/script.sh
o ./script.sh
). Tuttavia, faccio una delle poche cose per eseguirle a livello di sistema per non preoccuparmi delle directory e risparmiarmi inutili digitazioni extra.
1) Collegamento simbolico a /usr/bin
ln -s /home/username/Scripts/name.sh /usr/bin/name
(assicurati che non ci siano nomi sovrapposti, perché ovviamente lo sovrascriveresti.) Questo mi consente anche di tenerli nelle mie cartelle di sviluppo in modo da poterli modificare se necessario.
2) Aggiungi la directory Scripts al tuo percorso (usando .bash_profile - o qualsiasi altro.profile che hai sulla tua shell)
PATH=/path/to/scripts/:$PATH
3) Crea Alias nel .bash_profile
in ~/.bash_profile
aggiungi qualcosa come:
alias l="ls -l"
Come puoi vedere, la sintassi è solo alias, cifre che vuoi che fungano da comando, il comando. Quindi digitare "l" ovunque nel terminale risulterebbe in ls -l
Se vuoi sudo, basta alias sl="sudo ls -l"
da notare l vs sl (come esempio inutile).
In ogni caso, puoi semplicemente digitare sudo nameofscript
e vai per la tua strada. Non c'è bisogno di scherzare con ./ o . o sh, ecc. Contrassegnali prima come eseguibili :D
Di solito faccio come dici tu
sh /path/to/script
E per eseguirlo come root/superuser
sudo sh /path/to/script
La tua directory corrente è importante solo se gli script presumono che tu sia nella stessa cartella di essa. Presumo che la maggior parte degli script non lo faccia e che tu possa eseguirlo come sopra.