GNU/Linux >> Linux Esercitazione >  >> Linux

Esecuzione di script da un'altra directory

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.


Linux
  1. Eseguire script Bash all'ingresso di una directory?

  2. Su quale shell sto correndo?

  3. Usando il comando cp nella shell linux, come posso copiare un'intera directory in un'altra directory?

  4. Come rimuovere qualsiasi stringa da un file tramite script di shell?

  5. come modificare /etc/hosts dagli script di shell?

Consenti Setuid sugli script della shell?

Come spostare tutti i file (inclusi quelli nascosti) da una directory all'altra?

Come copiare un file da un'altra directory a quella corrente?

Opzioni Su - Esecuzione del comando come un altro utente?

Array negli script di shell

Come utilizzare if-else negli script della shell?