Guide: Skaffa Directory of a Bash Script

Guide: Skaffa Directory of a Bash Script
Bash Script

Förstå Bash Script Directory Retrieval

När du arbetar med Bash-skript är det ofta nödvändigt att känna till katalogen där skriptet finns. Detta kan vara användbart för olika uppgifter, som att ställa in arbetskatalogen eller komma åt filer i förhållande till skriptets plats.

I den här guiden kommer vi att utforska hur man hämtar katalogsökvägen till ett Bash-skript från själva skriptet. Det här tillvägagångssättet är särskilt användbart när du vill att ditt skript ska fungera som en start för andra applikationer, för att säkerställa att det fungerar på rätt filer.

Kommando Beskrivning
readlink -f Löser hela sökvägen för en symbolisk länk och tillhandahåller den absoluta sökvägen för Bash-skriptet.
dirname Extraherar katalogsökvägen från en given filsökväg, som används för att bestämma skriptets katalog.
os.path.realpath(__file__) Returnerar den kanoniska sökvägen för den angivna filen och löser eventuella symboliska länkar i Python.
os.chdir() Ändrar den aktuella arbetskatalogen till den angivna sökvägen i Python.
abs_path($0) Ger den absoluta sökvägen för skriptet som körs i Perl.
chdir() Ändrar den aktuella arbetskatalogen till den angivna sökvägen i Perl och PHP.
system() Utför ett externt kommando inifrån ett skript i Perl.
exec() Kör ett externt program inifrån ett skript i PHP, som ersätter den nuvarande processen.

Detaljerad skriptförklaring

Skripten som tillhandahålls är utformade för att bestämma katalogen där de finns och ändra arbetskatalogen till den sökvägen. Detta är användbart när ett skript behöver arbeta med filer i sin egen katalog eller starta andra program från den platsen. Till exempel, i Bash-skriptet, kommandot readlink -f används för att få skriptets absoluta sökväg, och dirname extraherar katalogen från den sökvägen. Sedan cd kommandot ändrar den aktuella arbetskatalogen till skriptets katalog, vilket säkerställer att efterföljande kommandon fungerar på rätt plats.

I Python-exemplet, os.path.realpath(__file__) får manusets absoluta väg, och os.chdir() ändrar arbetskatalogen. Perl-skriptet använder abs_path($0) för att få manusets absoluta väg och chdir() att byta katalog. På liknande sätt använder PHP-skriptet realpath(__FILE__) för att hitta manusets väg och chdir() för att byta katalog. Varje skript avslutas med ett kommando för att starta ett program, vilket säkerställer att det körs i sammanhanget med skriptets katalog.

Bestämma katalogen för ett Bash-skript

Bash Script Exempel

#!/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 för skriptkataloghämtning

Exempel på Python-skript

#!/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 för att fastställa skriptkatalog

Perl-skriptexempel

#!/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 för att hitta dess katalog

PHP-skriptexempel

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

Alternativa metoder för att bestämma skriptkatalog

Bortsett från de metoder som nämnts tidigare, finns det andra tekniker för att bestämma katalogen för ett Bash-skript. En sådan metod är att använda miljövariabler. Till exempel $BASH_SOURCE variabeln innehåller filsökvägen till Bash-skriptet, vilket kan vara användbart för skript som kommer från andra skript. Ett annat tillvägagångssätt är att utnyttja kommandoradsargument. Genom att analysera $0 parameter, som innehåller namnet på skriptet som körs, kan du bestämma skriptets plats när det körs från olika sammanhang, som symboliska länkar eller källfiler.

Dessa alternativa metoder kan ge flexibilitet beroende på i vilket sammanhang skriptet används. När det till exempel handlar om symboliska länkar, readlink är ofta nödvändigt för att lösa skriptets sanna sökväg. Att förstå dessa olika tekniker säkerställer att dina skript är robusta och anpassningsbara till olika exekveringsmiljöer, vilket förbättrar deras användbarhet och tillförlitlighet.

Vanliga frågor

  1. Hur får jag katalogen för ett skript med hjälp av $BASH_SOURCE?
  2. Du kan använda dirname "$(realpath "${BASH_SOURCE[0]}")" för att hämta skriptets katalog.
  3. Vad är skillnaden mellan $0 och $BASH_SOURCE?
  4. $0 är namnet på skriptet som körs, while $BASH_SOURCE innehåller den fullständiga sökvägen för det hämtade skriptet.
  5. Kan jag använda readlink med symboliska länkar?
  6. Ja, readlink -f löser hela vägen för en symbolisk länk.
  7. Vad gör os.chdir() göra i Python?
  8. os.chdir() ändrar den aktuella arbetskatalogen till den angivna sökvägen.
  9. Hur får jag den absoluta sökvägen till ett skript i Perl?
  10. Använder sig av abs_path($0) från Cwd-modulen ger skriptets absoluta sökväg.
  11. Vilket kommando används i PHP för att köra ett externt program?
  12. exec() används för att köra ett externt program i PHP.
  13. Hur ändrar jag katalogen i PHP?
  14. chdir() används för att ändra den aktuella arbetskatalogen i PHP.
  15. Varför är dirname användbar i skript?
  16. dirname extraherar katalogsökvägen från en given filsökväg, vilket hjälper till att hitta skriptets katalog.

Sista tankar om skriptkataloghämtning

Att bestämma katalogen för ett Bash-skript är en avgörande uppgift för skript som måste fungera på lokala filer eller starta applikationer. Genom att använda kommandon som readlink, dirname, och med hjälp av miljövariabler, kan skript dynamiskt justera sin arbetskatalog. Denna praxis säkerställer att skriptet fungerar korrekt, oavsett var det körs från. Att förstå och implementera dessa metoder ökar flexibiliteten och tillförlitligheten hos dina skript, vilket gör dem mer effektiva för olika applikationer och användningsfall.