Посібник: отримати каталог сценарію Bash

Посібник: отримати каталог сценарію Bash
Bash Script

Розуміння отримання каталогу зі сценарієм Bash

Під час роботи зі сценаріями Bash часто необхідно знати каталог, у якому розташований скрипт. Це може бути корисним для різних завдань, наприклад встановлення робочого каталогу або доступу до файлів відносно розташування сценарію.

У цьому посібнику ми розглянемо, як отримати шлях до каталогу сценарію Bash із самого сценарію. Цей підхід особливо корисний, коли ви хочете, щоб ваш сценарій діяв як засіб запуску для інших програм, гарантуючи, що він працює з правильними файлами.

Команда опис
readlink -f Вирішує повний шлях символічного посилання, надаючи абсолютний шлях сценарію Bash.
dirname Витягує шлях до каталогу з заданого шляху до файлу, який використовується для визначення каталогу сценарію.
os.path.realpath(__file__) Повертає канонічний шлях до вказаного файлу, розв’язуючи будь-які символічні посилання в Python.
os.chdir() Змінює поточний робочий каталог на вказаний шлях у Python.
abs_path($0) Надає абсолютний шлях сценарію, який виконується в Perl.
chdir() Змінює поточний робочий каталог на вказаний шлях у Perl і PHP.
system() Виконує зовнішню команду зі сценарію в Perl.
exec() Запускає зовнішню програму зі сценарію на PHP, замінюючи поточний процес.

Детальне пояснення сценарію

Надані сценарії призначені для визначення каталогу, у якому вони розташовані, і зміни робочого каталогу на цей шлях. Це корисно, коли сценарію потрібно працювати з файлами у власному каталозі або запускати інші програми з цього розташування. Наприклад, у сценарії Bash команда readlink -f використовується для отримання абсолютного шляху сценарію та dirname витягує каталог із цього шляху. Потім, cd команда змінює поточний робочий каталог на каталог сценарію, забезпечуючи роботу наступних команд у правильному місці.

У прикладі Python os.path.realpath(__file__) отримує абсолютний шлях сценарію, і os.chdir() змінює робочий каталог. Сценарій Perl використовує abs_path($0) щоб отримати абсолютний шлях сценарію та chdir() для зміни каталогів. Подібним чином використовує сценарій PHP realpath(__FILE__) щоб знайти шлях до сценарію та chdir() щоб змінити каталог. Кожен сценарій завершується командою для запуску програми, яка гарантує, що вона виконується в контексті каталогу сценарію.

Визначення каталогу сценарію Bash

Приклад сценарію Bash

#!/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 для пошуку каталогу сценаріїв

Приклад сценарію Python

#!/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 для визначення каталогу сценаріїв

Приклад сценарію Perl

#!/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 для пошуку його каталогу

Приклад скрипта 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');
?>

Альтернативні методи визначення каталогу сценаріїв

Окрім методів, згаданих раніше, існують інші методи визначення каталогу сценарію Bash. Одним із таких методів є використання змінних середовища. Наприклад, the $BASH_SOURCE змінна містить шлях до файлу сценарію Bash, який може бути корисним для сценаріїв, створених іншими сценаріями. Інший підхід полягає у використанні аргументів командного рядка. Аналізуючи $0 Параметр, який містить назву сценарію, що виконується, ви можете визначити розташування сценарію під час виконання з різних контекстів, таких як символічні посилання або вихідні файли.

Ці альтернативні методи можуть забезпечити гнучкість залежно від контексту, у якому використовується сценарій. Наприклад, коли мова йде про символічні посилання, readlink часто необхідно визначити справжній шлях сценарію. Розуміння цих різних методів гарантує, що ваші сценарії є надійними та адаптованими до різних середовищ виконання, підвищуючи їх корисність і надійність.

Питання що часто задаються

  1. Як отримати каталог сценарію за допомогою $BASH_SOURCE?
  2. Ви можете використовувати dirname "$(realpath "${BASH_SOURCE[0]}")" щоб отримати каталог сценарію.
  3. Яка різниця між $0 і $BASH_SOURCE?
  4. $0 це ім'я сценарію, який виконується, while $BASH_SOURCE містить повний шлях вихідного сценарію.
  5. Чи можу я використовувати readlink із символічними посиланнями?
  6. так, readlink -f вирішує повний шлях символічного посилання.
  7. Що робить os.chdir() зробити на Python?
  8. os.chdir() змінює поточний робочий каталог на вказаний шлях.
  9. Як отримати абсолютний шлях сценарію в Perl?
  10. Використання abs_path($0) із модуля Cwd надає абсолютний шлях до сценарію.
  11. Яка команда використовується в PHP для виконання зовнішньої програми?
  12. exec() використовується для запуску зовнішньої програми на PHP.
  13. Як змінити каталог у PHP?
  14. chdir() використовується для зміни поточного робочого каталогу в PHP.
  15. Чому це dirname корисний у сценаріях?
  16. dirname витягує шлях до каталогу з заданого шляху до файлу, допомагаючи знайти каталог сценарію.

Останні думки щодо пошуку каталогу сценаріїв

Визначення каталогу сценарію Bash є важливим завданням для сценаріїв, яким потрібно працювати з локальними файлами або запускати програми. Використовуючи такі команди, як readlink, dirname, і використовуючи змінні середовища, сценарії можуть динамічно налаштовувати свій робочий каталог. Ця практика гарантує правильну роботу сценарію, незалежно від того, звідки він виконується. Розуміння та впровадження цих методів підвищує гнучкість і надійність ваших сценаріїв, роблячи їх більш ефективними для різних програм і випадків використання.