Przewodnik: Uzyskaj katalog skryptu Bash

Przewodnik: Uzyskaj katalog skryptu Bash
Bash Script

Zrozumienie pobierania katalogu skryptu Bash

Podczas pracy ze skryptami Bash często konieczna jest znajomość katalogu, w którym znajduje się skrypt. Może to być przydatne do różnych zadań, takich jak ustawianie katalogu roboczego lub uzyskiwanie dostępu do plików w zależności od lokalizacji skryptu.

W tym przewodniku przyjrzymy się, jak pobrać ścieżkę katalogu skryptu Bash z poziomu samego skryptu. Takie podejście jest szczególnie przydatne, gdy chcesz, aby skrypt działał jako program uruchamiający inne aplikacje, zapewniając, że będzie działał na właściwych plikach.

Komenda Opis
readlink -f Rozpoznaje pełną ścieżkę dowiązania symbolicznego, zapewniając bezwzględną ścieżkę skryptu Bash.
dirname Wyodrębnia ścieżkę katalogu z podanej ścieżki pliku, służącą do określenia katalogu skryptu.
os.path.realpath(__file__) Zwraca ścieżkę kanoniczną określonego pliku, rozwiązując wszelkie dowiązania symboliczne w Pythonie.
os.chdir() Zmienia bieżący katalog roboczy na określoną ścieżkę w Pythonie.
abs_path($0) Podaje bezwzględną ścieżkę skryptu wykonywanego w Perlu.
chdir() Zmienia bieżący katalog roboczy na określoną ścieżkę w Perlu i PHP.
system() Wykonuje zewnętrzne polecenie ze skryptu w Perlu.
exec() Uruchamia zewnętrzny program z poziomu skryptu w PHP, zastępując bieżący proces.

Szczegółowe wyjaśnienie skryptu

Dostarczone skrypty mają na celu określenie katalogu, w którym się znajdują i zmianę katalogu roboczego na tę ścieżkę. Jest to przydatne, gdy skrypt musi operować na plikach w swoim własnym katalogu lub uruchamiać inne aplikacje z tej lokalizacji. Na przykład w skrypcie Bash polecenie readlink -f służy do uzyskania bezwzględnej ścieżki skryptu, oraz dirname wyodrębnia katalog z tej ścieżki. A później cd polecenie zmienia bieżący katalog roboczy na katalog skryptu, zapewniając, że kolejne polecenia będą działać we właściwej lokalizacji.

W przykładzie Pythona os.path.realpath(__file__) pobiera bezwzględną ścieżkę skryptu i os.chdir() zmienia katalog roboczy. Używany jest skrypt Perla abs_path($0) aby uzyskać bezwzględną ścieżkę skryptu i chdir() zmienić katalogi. Podobnie używa skrypt PHP realpath(__FILE__) aby znaleźć ścieżkę skryptu i chdir() aby zmienić katalog. Każdy skrypt kończy się poleceniem uruchomienia aplikacji, gwarantującym jej działanie w kontekście katalogu skryptu.

Określanie katalogu skryptu Bash

Przykład skryptu Basha

#!/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

Alternatywa dla Pythona do odzyskiwania katalogu skryptów

Przykład skryptu Pythona

#!/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')

Skrypt Perla do określania katalogu skryptów

Przykład skryptu Perla

#!/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');

Skrypt PHP do lokalizacji jego katalogu

Przykład skryptu PHP

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

Alternatywne metody określania katalogu skryptów

Oprócz metod wspomnianych wcześniej istnieją inne techniki określania katalogu skryptu Bash. Jedną z takich metod jest użycie zmiennych środowiskowych. Na przykład $BASH_SOURCE zmienna zawiera ścieżkę pliku skryptu Bash, która może być przydatna w przypadku skryptów pochodzących z innych skryptów. Innym podejściem jest wykorzystanie argumentów wiersza poleceń. Analizując $0 parametr, który zawiera nazwę wykonywanego skryptu, możesz określić lokalizację skryptu podczas wykonywania z różnych kontekstów, takich jak łącza symboliczne lub pliki źródłowe.

Te alternatywne metody mogą zapewnić elastyczność w zależności od kontekstu, w którym używany jest skrypt. Na przykład, gdy mamy do czynienia z dowiązaniami symbolicznymi, readlink jest często konieczne do ustalenia prawdziwej ścieżki skryptu. Zrozumienie tych różnych technik gwarantuje, że skrypty będą solidne i można je dostosować do różnych środowisk wykonawczych, zwiększając ich użyteczność i niezawodność.

Często Zadawane Pytania

  1. Jak uzyskać katalog skryptu za pomocą $BASH_SOURCE?
  2. Możesz użyć dirname "$(realpath "${BASH_SOURCE[0]}")" aby uzyskać katalog skryptu.
  3. Jaka jest różnica pomiędzy $0 I $BASH_SOURCE?
  4. $0 to nazwa wykonywanego skryptu, podczas gdy $BASH_SOURCE zawiera pełną ścieżkę źródłowego skryptu.
  5. Mogę uzyć readlink z dowiązaniami symbolicznymi?
  6. Tak, readlink -f rozpoznaje pełną ścieżkę dowiązania symbolicznego.
  7. Co robi os.chdir() zrobić w Pythonie?
  8. os.chdir() zmienia bieżący katalog roboczy na określoną ścieżkę.
  9. Jak uzyskać bezwzględną ścieżkę skryptu w Perlu?
  10. Za pomocą abs_path($0) z modułu Cwd podaje bezwzględną ścieżkę skryptu.
  11. Jakie polecenie jest używane w PHP do wykonania programu zewnętrznego?
  12. exec() służy do uruchamiania zewnętrznego programu w PHP.
  13. Jak zmienić katalog w PHP?
  14. chdir() służy do zmiany bieżącego katalogu roboczego w PHP.
  15. Dlaczego jest dirname przydatne w skryptach?
  16. dirname wyodrębnia ścieżkę katalogu z podanej ścieżki pliku, pomagając zlokalizować katalog skryptu.

Końcowe przemyślenia na temat odzyskiwania katalogu skryptów

Określenie katalogu skryptu Bash jest kluczowym zadaniem w przypadku skryptów, które muszą działać na plikach lokalnych lub uruchamiać aplikacje. Używając poleceń takich jak readlink, dirnamei wykorzystując zmienne środowiskowe, skrypty mogą dynamicznie dostosowywać swój katalog roboczy. Praktyka ta zapewnia poprawne działanie skryptu, niezależnie od tego, skąd jest wykonywany. Zrozumienie i wdrożenie tych metod zwiększa elastyczność i niezawodność skryptów, czyniąc je bardziej wydajnymi w różnych zastosowaniach i przypadkach użycia.