Guide: Få Directory of a Bash Script

Guide: Få Directory of a Bash Script
Bash Script

Forståelse af Bash Script Directory-hentning

Når du arbejder med Bash-scripts, er det ofte nødvendigt at kende den mappe, hvor scriptet er placeret. Dette kan være nyttigt til forskellige opgaver, såsom indstilling af arbejdsbiblioteket eller adgang til filer i forhold til scriptets placering.

I denne vejledning vil vi undersøge, hvordan man henter biblioteksstien til et Bash-script fra selve scriptet. Denne tilgang er især nyttig, når du ønsker, at dit script skal fungere som en launcher for andre applikationer og sikre, at det fungerer på de korrekte filer.

Kommando Beskrivelse
readlink -f Løser den fulde sti til et symbolsk link, hvilket giver den absolutte sti til Bash-scriptet.
dirname Uddrager mappestien fra en given filsti, der bruges til at bestemme scriptets mappe.
os.path.realpath(__file__) Returnerer den kanoniske sti til den angivne fil og løser eventuelle symbolske links i Python.
os.chdir() Ændrer den aktuelle arbejdsmappe til den angivne sti i Python.
abs_path($0) Giver den absolutte sti til scriptet, der udføres i Perl.
chdir() Ændrer den aktuelle arbejdsmappe til den angivne sti i Perl og PHP.
system() Udfører en ekstern kommando fra et script i Perl.
exec() Kører et eksternt program inde fra et script i PHP, der erstatter den nuværende proces.

Detaljeret scriptforklaring

De medfølgende scripts er designet til at bestemme det bibliotek, de er placeret i, og ændre arbejdsbiblioteket til den sti. Dette er nyttigt, når et script skal operere på filer i sin egen mappe eller starte andre programmer fra den placering. For eksempel, i Bash-scriptet, kommandoen readlink -f bruges til at få scriptets absolutte sti, og dirname udtrækker mappen fra den sti. Derefter cd kommando ændrer den aktuelle arbejdsmappe til scriptets mappe, hvilket sikrer, at efterfølgende kommandoer fungerer på den korrekte placering.

I Python-eksemplet, os.path.realpath(__file__) får manuskriptets absolutte vej, og os.chdir() ændrer arbejdsbiblioteket. Perl-scriptet bruger abs_path($0) at få manuskriptets absolutte vej og chdir() at ændre mapper. På samme måde bruger PHP-scriptet realpath(__FILE__) at finde scriptets vej og chdir() for at ændre biblioteket. Hvert script afsluttes med en kommando til at starte et program, hvilket sikrer, at det kører i sammenhæng med scriptets mappe.

Bestemmelse af mappen for et Bash-script

Eksempel på Bash Script

#!/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 til script-mappehentning

Python script eksempel

#!/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 til bestemmelse af script-mappe

Perl script eksempel

#!/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 til at finde dets bibliotek

PHP script eksempel

<?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 til at bestemme script-mappe

Bortset fra de tidligere nævnte metoder er der andre teknikker til at bestemme biblioteket for et Bash-script. En sådan metode er at bruge miljøvariabler. For eksempel $BASH_SOURCE variabel indeholder filstien til Bash-scriptet, hvilket kan være nyttigt for scripts, der stammer fra andre scripts. En anden tilgang er at udnytte kommandolinjeargumenter. Ved at analysere $0 parameter, som indeholder navnet på det script, der udføres, kan du bestemme scriptets placering, når det udføres fra forskellige sammenhænge, ​​såsom symbolske links eller kildefiler.

Disse alternative metoder kan give fleksibilitet afhængigt af den kontekst, hvori scriptet bruges. For eksempel, når det drejer sig om symbolske links, readlink er ofte nødvendigt for at løse scriptets sande vej. Forståelse af disse forskellige teknikker sikrer, at dine scripts er robuste og kan tilpasses til forskellige eksekveringsmiljøer, hvilket forbedrer deres anvendelighed og pålidelighed.

Ofte stillede spørgsmål

  1. Hvordan får jeg kataloget til et script ved hjælp af $BASH_SOURCE?
  2. Du kan bruge dirname "$(realpath "${BASH_SOURCE[0]}")" for at hente scriptets mappe.
  3. Hvad er forskellen mellem $0 og $BASH_SOURCE?
  4. $0 er navnet på det script, der udføres, mens $BASH_SOURCE indeholder den fulde sti til det hentede script.
  5. Kan jeg bruge readlink med symbolske links?
  6. Ja, readlink -f løser den fulde vej til et symbolsk link.
  7. Hvad gør os.chdir() gøre i Python?
  8. os.chdir() ændrer den aktuelle arbejdsmappe til den angivne sti.
  9. Hvordan får jeg den absolutte vej til et script i Perl?
  10. Ved brug af abs_path($0) fra Cwd-modulet giver den absolutte sti til scriptet.
  11. Hvilken kommando bruges i PHP til at udføre et eksternt program?
  12. exec() bruges til at køre et eksternt program i PHP.
  13. Hvordan ændrer jeg mappen i PHP?
  14. chdir() bruges til at ændre den aktuelle arbejdsmappe i PHP.
  15. Hvorfor er dirname nyttige i scripts?
  16. dirname udtrækker mappestien fra en given filsti, hvilket hjælper med at finde scriptets mappe.

Sidste tanker om hentning af scriptkatalog

At bestemme biblioteket for et Bash-script er en afgørende opgave for scripts, der skal fungere på lokale filer eller starte programmer. Ved at bruge kommandoer som readlink, dirname, og ved at udnytte miljøvariabler, kan scripts dynamisk justere deres arbejdsmappe. Denne praksis sikrer, at scriptet fungerer korrekt, uanset hvor det udføres fra. Forståelse og implementering af disse metoder øger fleksibiliteten og pålideligheden af ​​dine scripts, hvilket gør dem mere effektive til forskellige applikationer og use cases.