Guide: Få Directory of a Bash Script

Guide: Få Directory of a Bash Script
Bash Script

Forstå gjenfinning av Bash Script Directory

Når du arbeider med Bash-skript, er det ofte nødvendig å vite katalogen der skriptet ligger. Dette kan være nyttig for ulike oppgaver, for eksempel å angi arbeidskatalogen eller få tilgang til filer i forhold til skriptets plassering.

I denne veiledningen vil vi utforske hvordan du henter katalogbanen til et Bash-skript fra selve skriptet. Denne tilnærmingen er spesielt nyttig når du vil at skriptet skal fungere som en oppstarter for andre applikasjoner, for å sikre at det fungerer på de riktige filene.

Kommando Beskrivelse
readlink -f Løser hele banen til en symbolsk kobling, og gir den absolutte banen til Bash-skriptet.
dirname Trekker ut katalogbanen fra en gitt filbane, brukt til å bestemme skriptets katalog.
os.path.realpath(__file__) Returnerer den kanoniske banen til den angitte filen, og løser eventuelle symbolske lenker i Python.
os.chdir() Endrer gjeldende arbeidskatalog til den angitte banen i Python.
abs_path($0) Gir den absolutte banen til skriptet som kjøres i Perl.
chdir() Endrer gjeldende arbeidskatalog til den angitte banen i Perl og PHP.
system() Utfører en ekstern kommando fra et skript i Perl.
exec() Kjører et eksternt program fra et skript i PHP, og erstatter gjeldende prosess.

Detaljert skriptforklaring

Skriptene som følger med er laget for å bestemme katalogen de er plassert i og endre arbeidskatalogen til den banen. Dette er nyttig når et skript må operere på filer i sin egen katalog eller starte andre applikasjoner fra det stedet. For eksempel, i Bash-skriptet, kommandoen readlink -f brukes til å få den absolutte banen til skriptet, og dirname trekker ut katalogen fra den banen. Og så cd kommando endrer gjeldende arbeidskatalog til skriptets katalog, og sikrer at påfølgende kommandoer fungerer på riktig plassering.

I Python-eksemplet, os.path.realpath(__file__) får den absolutte banen til manuset, og os.chdir() endrer arbeidskatalogen. Perl-skriptet bruker abs_path($0) for å få manusets absolutte vei og chdir() å endre kataloger. På samme måte bruker PHP-skriptet realpath(__FILE__) for å finne skriptets vei og chdir() for å endre katalogen. Hvert skript avsluttes med en kommando for å starte et program, som sikrer at det kjører i konteksten til skriptets katalog.

Bestemme katalogen til et Bash-skript

Eksempel på Bash-skript

#!/bin/bash
# Get the directory of the script
SCRIPT_DIR=$(dirname "$(readlink -f "$0")")
echo "The script is located in: $SCRIPT_DIR"

# Change to the script's directory
cd "$SCRIPT_DIR" || exit

# Execute the application
./application

Python-alternativ for henting av skriptkatalog

Python-skripteksempel

#!/usr/bin/env python3
import os
import sys

# Get the directory of the script
script_dir = os.path.dirname(os.path.realpath(__file__))
print(f"The script is located in: {script_dir}")

# Change to the script's directory
os.chdir(script_dir)

# Execute the application
os.system('./application')

Perl-skript for å bestemme skriptkatalog

Eksempel på Perl-skript

#!/usr/bin/env perl
use Cwd 'abs_path';
use File::Basename;

# Get the directory of the script
$script_dir = dirname(abs_path($0));
print "The script is located in: $script_dir\n";

# Change to the script's directory
chdir $script_dir or die "Cannot change directory: $!";

# Execute the application
system('./application');

PHP-skript for å finne katalogen

Eksempel på PHP-skript

<?php
# Get the directory of the script
$script_dir = dirname(realpath(__FILE__));
echo "The script is located in: $script_dir\n";

# Change to the script's directory
chdir($script_dir);

# Execute the application
exec('./application');
?>

Alternative metoder for å bestemme skriptkatalog

Bortsett fra metodene nevnt tidligere, er det andre teknikker for å bestemme katalogen til et Bash-skript. En slik metode er å bruke miljøvariabler. For eksempel $BASH_SOURCE variabelen inneholder filbanen til Bash-skriptet, som kan være nyttig for skript hentet fra andre skript. En annen tilnærming er å utnytte kommandolinjeargumenter. Ved å analysere $0 parameter, som inneholder navnet på skriptet som kjøres, kan du bestemme skriptets plassering når det kjøres fra ulike kontekster, for eksempel symbolske lenker eller kildefiler.

Disse alternative metodene kan gi fleksibilitet avhengig av konteksten skriptet brukes i. For eksempel, når du arbeider med symbolske lenker, readlink er ofte nødvendig for å finne den sanne banen til skriptet. Å forstå disse forskjellige teknikkene sikrer at skriptene dine er robuste og kan tilpasses ulike utførelsesmiljøer, noe som forbedrer deres nytte og pålitelighet.

ofte stilte spørsmål

  1. Hvordan får jeg katalogen til et skript ved å bruke $BASH_SOURCE?
  2. Du kan bruke 1. 3 for å hente skriptets katalog.
  3. Hva er forskjellen mellom $0 og $BASH_SOURCE?
  4. $0 er navnet på skriptet som kjøres, while $BASH_SOURCE inneholder hele banen til kildeskriptet.
  5. Kan jeg bruke readlink med symbolske lenker?
  6. Ja, readlink -f løser hele banen til en symbolsk kobling.
  7. Hva gjør os.chdir() gjøre i Python?
  8. os.chdir() endrer gjeldende arbeidskatalog til den angitte banen.
  9. Hvordan får jeg den absolutte banen til et skript i Perl?
  10. Ved hjelp av abs_path($0) fra Cwd-modulen gir den absolutte banen til skriptet.
  11. Hvilken kommando brukes i PHP for å kjøre et eksternt program?
  12. exec() brukes til å kjøre et eksternt program i PHP.
  13. Hvordan endrer jeg katalogen i PHP?
  14. chdir() brukes til å endre gjeldende arbeidskatalog i PHP.
  15. Hvorfor er dirname nyttig i skript?
  16. dirname trekker ut katalogbanen fra en gitt filbane, og hjelper til med å finne skriptets katalog.

Siste tanker om henting av skriptkatalog

Å bestemme katalogen til et Bash-skript er en avgjørende oppgave for skript som må operere på lokale filer eller starte programmer. Ved å bruke kommandoer som readlink, dirname, og ved å utnytte miljøvariabler, kan skript justere arbeidskatalogen dynamisk. Denne praksisen sikrer at skriptet fungerer korrekt, uavhengig av hvor det kjøres fra. Å forstå og implementere disse metodene øker fleksibiliteten og påliteligheten til skriptene dine, noe som gjør dem mer effektive for ulike applikasjoner og brukstilfeller.