Ottieni il percorso assoluto di una sceneggiatura in bash

Ottieni il percorso assoluto di una sceneggiatura in bash
Un percorso è una posizione per una directory o un file. Esistono due tipi distinti di percorsi in Linux - assoluto e relativo. Il percorso relativo viene determinato usando la directory di lavoro corrente. D'altra parte, il percorso assoluto è il percorso completo di un file o di una directory. Il percorso completo, in particolare, è specificato dalla directory della radice. Un modo semplice per ricordare che è usando il /. Un percorso relativo non inizia con A / (la cartella radice). In questo tutorial, impareremo come ottenere il percorso assoluto di una sceneggiatura in Bash.

Percorso assoluto

Per cominciare, creiamo una semplice directory, sotto-directory e file.

In questo esempio, se Linuxhint è la nostra attuale directory di lavoro, allora il percorso assoluto dello script file.Sh è:

/home/kalyani/desktop/linuxhint/project2/script.sh

Il nostro percorso relativo è:

Project2/script.sh

Quello che puoi notare qui è che per recuperare il file chiamato script.Sh, se abbiamo un percorso assoluto, possiamo recuperarlo da qualsiasi parte dell'ecosistema Linux. Il nostro percorso relativo non è così flessibile; D'altra parte, dipende dalla directory di lavoro corrente. Nel caso precedente, se fossimo nella directory Linuxhint, ed era la nostra attuale directory di lavoro, quindi accedere allo script.Sh, dovremmo digitare Project2/Script.sh. Notare come non ci sia / all'inizio del percorso relativo.

Il nostro obiettivo è recuperare l'indirizzo o il percorso completo dello script (percorso assoluto).Sh dato un percorso relativo.

Readlink

Un comando che è possibile utilizzare per acquisire l'indirizzo completo di un file o un eseguibile è ReaDLink. Readlink viene in genere utilizzato per catturare il percorso di un collegamento simbolico o di un file canonico. Tuttavia, ReadLink può anche calcolare il percorso assoluto dato un percorso relativo. In tutti i casi, dovrai allegare una bandiera a ReadLink. La flag più comunemente usata in questi casi è la flag F.

Esempio n. 1 - Readlink usando il flag F

sceneggiatura.sh
#!/Bin/Bash
path = 'readlink -f "$ Bash_source: -$ 0" "
Dir_path = 'dirname $ path'
echo 'Il percorso assoluto è' $
eco '---------------------------------------------'
echo 'Il percorso della directory è' $ dir_path

In genere, $ 0 viene utilizzato per ottenere il percorso dello script; Tuttavia, questo non funziona sempre. Quindi un modo più affidabile o robusto per ottenere il percorso relativo dello script è usando $ Bash_source:-$ 0.

Supponiamo che per un'istanza scriva echo $ Bash_source:-$ 0, il risultato che ottengo è ./script.sh. Questo è il percorso non assoluto al nostro file di script corrente. Vale a dire, la posizione dello script in esecuzione è archiviata in $ BASH_SOURCE:-$ 0.

Una volta che prendiamo in modo affidabile il percorso della sceneggiatura, possiamo quindi passarlo a ReadLink con la flag F. Possiamo successivamente utilizzare il comando dirname per recuperare il percorso della directory. Il comando dirname ometterà l'ultimo valore del percorso e restituirà il resto.

Quindi, se abbiamo un percorso di/home/kalyani/desktop/linuxhint/project2/script.sh, e applichiamo dirname ad esso, otterremo/home/kalyani/desktop/linuxhint/project2. Questo ha spogliato il basename o il nome dello script dall'indirizzo o dal percorso.

Realpath

Un altro comando che può essere utilizzato è RealPath. RealPath è un comando Linux utilizzato per stampare il nome del file assoluto risolto. Richiede che esistano tutti i componenti ad eccezione dell'ultimo componente.

sceneggiatura.sh
#!/Bin/Bash
Path = $ (RealPath “$ Bash_source:-$ 0”)
echo 'Il percorso assoluto è' $
eco '-----------------------------------'
Dir_path = $ (dirname $ path)
echo 'Il percorso della directory è' $ dpath

Qui, ancora una volta, otteniamo il percorso dello script usando $ Bash_source:-$ 0. RealPath prenderà il percorso completo per te, e Dirname otterrà tutto tranne l'ultimo valore del percorso assoluto.

Alternativa n. 1

Supponiamo ora di non avere il privilegio di usare RealPath o ReadLink. Non viene fornito con tutti i sistemi Linux! Ho avuto la fortuna di aver usato Ubuntu e quindi ho potuto accedervi. Tuttavia, un lungo modo di fare la stessa cosa è il seguente:

sceneggiatura.sh
#!/Bin/Bash
Dir_path = $ (cd $ (dirname “$ bash_source:-$ 0”) && pwd)
Path = $ dir_path/$ (basename “$ Bash_source:-$ 0”)
echo 'Il percorso assoluto è' $
eco '----------------------------------'
echo 'Il percorso della directory è' $ dir_path

In questo caso, in primo luogo, abbiamo bisogno del percorso dello script corrente e, da esso, usiamo DirName per ottenere il percorso della directory del file di script. Una volta che abbiamo, ci siamo cd nella cartella e stampiamo la directory di lavoro. Per ottenere il percorso completo o assoluto, allegiamo il basename del file di script al percorso della directory o $ dir_path.

Recuperare il percorso di un'altra sceneggiatura (diverso da sé)

Negli esempi precedenti, abbiamo recuperato i percorsi assoluti e di directory del file di script stesso. E se volessimo recuperare i percorsi assoluti e di directory di un file diverso dallo script in cui stiamo lavorando (oltre a sé)?

Quindi qui, abbiamo creato un nuovo file chiamato script2.sh, e vorremmo ottenere i percorsi assoluti e directory di script2.sh.

In sceneggiatura.sh:

sceneggiatura.sh
#!/Bin/Bash
Path = $ (RealPath Script2.sh)
echo 'Il percorso assoluto è' $
eco '-----------------------------------'
Dir_path = $ (dirname $ path)
echo 'Il percorso della directory è' $ dpath

Anche uno dei metodi precedenti dovrebbe funzionare qui. Tuttavia, qui, useremo il percorso relativo di script2.Sh per recuperare il percorso assoluto.

Recuperare il percorso di un comando

Ora, puoi ottenere i percorsi assoluti e directory di tutti gli script che desideri e quello dei comandi. Supponiamo per un momento che vogliamo ottenere i percorsi assoluti e directory del comando LS. Scriveremmo:

sceneggiatura.sh
#!/Bin/Bash
Path = $ (che LS)
echo 'Il percorso assoluto è' $
eco '-----------------------------------'
Dir_path = $ (dirname $ path)
echo 'Il percorso della directory è' $ dir_path

Un percorso è un indirizzo utilizzato per individuare un file o una cartella. Un percorso assoluto è un indirizzo o una posizione completa in modo tale che, indipendentemente da dove ti trovi, puoi recuperare il file che desideri. D'altra parte, viene determinato un percorso relativo in relazione alla directory di lavoro corrente. In Bash, ci sono una serie di modi per recuperare l'indirizzo completo di una sceneggiatura. In particolare, possiamo usare RealPath, ReadLink o persino creare il nostro piccolo script personalizzato. Quando vogliamo conoscere il percorso della directory, possiamo usare il comando dirname nel nostro script bash per recuperare il nostro percorso di directory. È abbastanza facile ottenere l'indirizzo completo usando un indirizzo relativo.

Codice felice!