Gids: Haal de directory van een Bash-script op

Gids: Haal de directory van een Bash-script op
Bash Script

Inzicht in het ophalen van Bash-scriptdirectory's

Wanneer u met Bash-scripts werkt, is het vaak nodig om te weten in welke map het script zich bevindt. Dit kan handig zijn voor verschillende taken, zoals het instellen van de werkmap of het openen van bestanden ten opzichte van de locatie van het script.

In deze handleiding zullen we onderzoeken hoe u het mappad van een Bash-script kunt ophalen vanuit het script zelf. Deze aanpak is vooral handig als u wilt dat uw script als opstartprogramma voor andere toepassingen fungeert, zodat het op de juiste bestanden werkt.

Commando Beschrijving
readlink -f Lost het volledige pad van een symbolische link op en biedt het absolute pad van het Bash-script.
dirname Extraheert het mappad uit een bepaald bestandspad, dat wordt gebruikt om de map van het script te bepalen.
os.path.realpath(__file__) Retourneert het canonieke pad van het opgegeven bestand, waarbij eventuele symbolische koppelingen in Python worden opgelost.
os.chdir() Verandert de huidige werkmap naar het opgegeven pad in Python.
abs_path($0) Geeft het absolute pad van het script dat wordt uitgevoerd in Perl.
chdir() Verandert de huidige werkmap naar het opgegeven pad in Perl en PHP.
system() Voert een extern commando uit vanuit een script in Perl.
exec() Voert een extern programma uit vanuit een script in PHP, ter vervanging van het huidige proces.

Gedetailleerde scriptuitleg

De meegeleverde scripts zijn ontworpen om de map te bepalen waarin ze zich bevinden en om de werkmap naar dat pad te wijzigen. Dit is handig wanneer een script moet werken met bestanden in zijn eigen map of andere toepassingen vanaf die locatie moet starten. In het Bash-script is bijvoorbeeld de opdracht readlink -f wordt gebruikt om het absolute pad van het script te verkrijgen, en dirname extraheert de map uit dat pad. Dan de cd command verandert de huidige werkmap naar de map van het script, waardoor volgende opdrachten op de juiste locatie worden uitgevoerd.

In het Python-voorbeeld: os.path.realpath(__file__) krijgt het absolute pad van het script, en os.chdir() verandert de werkmap. Het Perl-script gebruikt abs_path($0) om het absolute pad van het script te verkrijgen en chdir() om mappen te veranderen. Op dezelfde manier gebruikt het PHP-script realpath(__FILE__) om het pad van het script te vinden en chdir() om de map te wijzigen. Elk script wordt afgesloten met een opdracht om een ​​applicatie te starten, waarbij ervoor wordt gezorgd dat deze in de context van de map van het script wordt uitgevoerd.

De map van een Bash-script bepalen

Bash-scriptvoorbeeld

#!/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-alternatief voor het ophalen van scriptdirectory's

Python-scriptvoorbeeld

#!/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-script voor het bepalen van de scriptdirectory

Perl-scriptvoorbeeld

#!/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-script om de map te lokaliseren

PHP-scriptvoorbeeld

<?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');
?>

Alternatieve methoden voor het bepalen van de scriptdirectory

Naast de eerder genoemde methoden zijn er nog andere technieken om de directory van een Bash-script te bepalen. Eén van deze methoden is het gebruik van omgevingsvariabelen. Bijvoorbeeld de $BASH_SOURCE variabele bevat het bestandspad van het Bash-script, wat handig kan zijn voor scripts die afkomstig zijn van andere scripts. Een andere benadering is het gebruik van opdrachtregelargumenten. Door het analyseren van de $0 parameter, die de naam bevat van het script dat wordt uitgevoerd, kunt u de locatie van het script bepalen wanneer het wordt uitgevoerd vanuit verschillende contexten, zoals symbolische koppelingen of bronbestanden.

Deze alternatieve methoden kunnen flexibiliteit bieden, afhankelijk van de context waarin het script wordt gebruikt. Wanneer we bijvoorbeeld te maken hebben met symbolische links, readlink is vaak nodig om het ware pad van het script te achterhalen. Als u deze verschillende technieken begrijpt, zorgt u ervoor dat uw scripts robuust zijn en aanpasbaar aan verschillende uitvoeringsomgevingen, waardoor hun bruikbaarheid en betrouwbaarheid worden vergroot.

Veel Gestelde Vragen

  1. Hoe krijg ik de map van een script met behulp van $BASH_SOURCE?
  2. Je kunt gebruiken dirname "$(realpath "${BASH_SOURCE[0]}")" om de map van het script op te halen.
  3. Wat is het verschil tussen $0 En $BASH_SOURCE?
  4. $0 is de naam van het script dat wordt uitgevoerd, while $BASH_SOURCE bevat het volledige pad van het bronscript.
  5. Kan ik gebruiken readlink met symbolische links?
  6. Ja, readlink -f lost het volledige pad van een symbolische link op.
  7. Wat doet os.chdir() doen in Python?
  8. os.chdir() verandert de huidige werkmap naar het opgegeven pad.
  9. Hoe krijg ik het absolute pad van een script in Perl?
  10. Gebruik makend van abs_path($0) uit de Cwd-module biedt het absolute pad van het script.
  11. Welk commando wordt in PHP gebruikt om een ​​extern programma uit te voeren?
  12. exec() wordt gebruikt om een ​​extern programma in PHP uit te voeren.
  13. Hoe wijzig ik de map in PHP?
  14. chdir() wordt gebruikt om de huidige werkmap in PHP te wijzigen.
  15. Waarom is dirname nuttig in scripts?
  16. dirname extraheert het mappad uit een bepaald bestandspad, waardoor de map van het script kan worden gevonden.

Laatste gedachten over het ophalen van scriptdirectory's

Het bepalen van de directory van een Bash-script is een cruciale taak voor scripts die op lokale bestanden moeten werken of applicaties moeten starten. Door gebruik te maken van commando's als readlink, dirnameen door gebruik te maken van omgevingsvariabelen kunnen scripts hun werkmap dynamisch aanpassen. Deze praktijk zorgt ervoor dat het script correct werkt, ongeacht waar het wordt uitgevoerd. Het begrijpen en implementeren van deze methoden vergroot de flexibiliteit en betrouwbaarheid van uw scripts, waardoor ze efficiënter worden voor verschillende toepassingen en gebruiksscenario's.