Vadovas: Gaukite „Bash“ scenarijaus katalogą

Vadovas: Gaukite „Bash“ scenarijaus katalogą
Bash Script

„Bash“ scenarijaus katalogo gavimo supratimas

Dirbant su Bash scenarijais dažnai reikia žinoti katalogą, kuriame yra scenarijus. Tai gali būti naudinga atliekant įvairias užduotis, pvz., nustatant darbo katalogą arba pasiekiant failus, susijusius su scenarijaus vieta.

Šiame vadove mes išnagrinėsime, kaip iš paties scenarijaus išgauti „Bash“ scenarijaus katalogo kelią. Šis metodas yra ypač naudingas, kai norite, kad jūsų scenarijus veiktų kaip kitų programų paleidimo priemonė, užtikrinant, kad jis veiktų tinkamais failais.

komandą apibūdinimas
readlink -f Išsprendžia visą simbolinės nuorodos kelią, suteikdamas absoliutų Bash scenarijaus kelią.
dirname Ištraukiamas katalogo kelias iš nurodyto failo kelio, naudojamas scenarijaus katalogui nustatyti.
os.path.realpath(__file__) Grąžina kanoninį nurodyto failo kelią, išspręsdamas visas simbolines nuorodas Python.
os.chdir() Pakeičia dabartinį darbo katalogą į nurodytą kelią Python.
abs_path($0) Pateikiamas absoliutus scenarijaus, vykdomo Perl, kelias.
chdir() Pakeičia esamą darbo katalogą į nurodytą kelią Perl ir PHP.
system() Vykdo išorinę komandą iš Perl scenarijaus.
exec() Vykdo išorinę programą iš PHP scenarijaus, pakeisdamas dabartinį procesą.

Išsamus scenarijaus paaiškinimas

Pateikti scenarijai skirti nustatyti katalogą, kuriame jie yra, ir pakeisti darbo katalogą į tą kelią. Tai naudinga, kai scenarijus turi veikti su failais savo kataloge arba paleisti kitas programas iš tos vietos. Pavyzdžiui, Bash scenarijuje komanda readlink -f naudojamas norint gauti absoliutų scenarijaus kelią, ir dirname ištraukia katalogą iš to kelio. Tada cd komanda pakeičia esamą darbo katalogą į scenarijaus katalogą, užtikrindama, kad tolesnės komandos veiktų tinkamoje vietoje.

Python pavyzdyje os.path.realpath(__file__) gauna absoliutų scenarijaus kelią ir os.chdir() pakeičia darbo katalogą. Naudoja Perl scenarijus abs_path($0) gauti absoliutų scenarijaus kelią ir chdir() pakeisti katalogus. Panašiai naudojamas PHP scenarijus realpath(__FILE__) rasti scenarijaus kelią ir chdir() norėdami pakeisti katalogą. Kiekvienas scenarijus baigiamas komanda paleisti programą, užtikrinant, kad ji veiktų scenarijaus katalogo kontekste.

„Bash“ scenarijaus katalogo nustatymas

Bash scenarijaus pavyzdys

#!/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 alternatyva scenarijų katalogų nuskaitymui

Python scenarijaus pavyzdys

#!/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 scenarijus, skirtas scenarijų katalogui nustatyti

Perl scenarijaus pavyzdys

#!/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 scenarijus, skirtas jo katalogui rasti

PHP scenarijaus pavyzdys

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

Alternatyvūs scenarijų katalogo nustatymo metodai

Be anksčiau paminėtų metodų, yra ir kitų metodų, leidžiančių nustatyti „Bash“ scenarijaus katalogą. Vienas iš tokių būdų yra aplinkos kintamųjų naudojimas. Pavyzdžiui, $BASH_SOURCE kintamajame yra Bash scenarijaus failo kelias, kuris gali būti naudingas scenarijus, gautus naudojant kitus scenarijus. Kitas būdas yra komandinės eilutės argumentų panaudojimas. Analizuodami $0 parametrą, kuriame yra vykdomo scenarijaus pavadinimas, galite nustatyti scenarijaus vietą, kai jis vykdomas iš įvairių kontekstų, pvz., simbolinių nuorodų ar šaltinio failų.

Šie alternatyvūs metodai gali suteikti lankstumo, atsižvelgiant į kontekstą, kuriame naudojamas scenarijus. Pavyzdžiui, kai kalbama apie simbolines nuorodas, readlink dažnai būtina norint išspręsti tikrąjį scenarijaus kelią. Šių skirtingų metodų supratimas užtikrina, kad jūsų scenarijai yra tvirti ir pritaikomi įvairioms vykdymo aplinkoms, todėl padidėja jų naudingumas ir patikimumas.

Dažnai užduodami klausimai

  1. Kaip gauti scenarijaus katalogą naudojant $BASH_SOURCE?
  2. Tu gali naudoti dirname "$(realpath "${BASH_SOURCE[0]}")" Norėdami gauti scenarijaus katalogą.
  3. Koks skirtumas tarp $0 ir $BASH_SOURCE?
  4. $0 yra vykdomo scenarijaus pavadinimas, while $BASH_SOURCE yra visas šaltinio scenarijaus kelias.
  5. Ar galiu naudoti readlink su simbolinėmis nuorodomis?
  6. taip, readlink -f išsprendžia visą simbolinės nuorodos kelią.
  7. Ką daro os.chdir() daryti Python?
  8. os.chdir() pakeičia esamą darbo katalogą į nurodytą kelią.
  9. Kaip gauti absoliutų scenarijaus kelią „Perl“?
  10. Naudojant abs_path($0) iš Cwd modulio pateikia absoliutų scenarijaus kelią.
  11. Kokia komanda PHP naudojama išorinei programai vykdyti?
  12. exec() naudojamas išorinei programai paleisti PHP.
  13. Kaip pakeisti katalogą PHP?
  14. chdir() naudojamas pakeisti esamą darbo katalogą PHP.
  15. Kodėl dirname naudingi scenarijuose?
  16. dirname ištraukia katalogo kelią iš nurodyto failo kelio, padėdamas rasti scenarijaus katalogą.

Paskutinės mintys apie scenarijų katalogo atkūrimą

„Bash“ scenarijaus katalogo nustatymas yra labai svarbi užduotis scenarijuose, kurie turi veikti su vietiniais failais arba paleisti programas. Naudodami tokias komandas kaip readlink, dirname, ir pasitelkę aplinkos kintamuosius, scenarijai gali dinamiškai koreguoti savo darbo katalogą. Ši praktika užtikrina, kad scenarijus veiktų tinkamai, nepaisant to, iš kur jis vykdomas. Šių metodų supratimas ir įgyvendinimas padidina jūsų scenarijų lankstumą ir patikimumą, todėl jie tampa veiksmingesni įvairioms programoms ir naudojimo atvejams.