Визначаємо повний шлях до скрипта (bash)

Буду описувати функції які використовують. В цій статті розглянемо зразу 2 корисні функції. Як отримати директорію де знаходиться скрипт або повний шлях до скрипта.

Суть проблеми

Дуже часто у моїх корисних утилітах іде обробка інших файлів. Створення, видалення. Ці файли розташовуються відносно скрипта який виконує всю роботу. Для прикладу обробити дані і зберегти вивід у файл done.txt

Назвемо наш скрипт getItems.sh поряд з ним розмістимо два вищевказані файли. Робити вивід у файл done.txt ми будемо досить просто:

echo "$data" > done.txt;

Це все добре тоді, коли ми запускаємо команду з цієї самої директорії:

./getItems.sh;

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

./ads/getItems.sh; # створить файл ./ads/done.txt

Ось тут нам і необхідно визначити де знаходиться наш скрипт і створити файл у цій самій директорії.

Шлях до скрипта

script.path (){
    echo "`pwd`/$0";
}

echo `script.path`;

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

 script.dir (){
   echo "`dirname $(script.path)`";
 }

Все дуже просто. Ці дві функції працюють у зв'язці і їх використовувати можна де забажаєте. Головне створіть файл бібліотеки (збірка корисних команд) і підключайте його де вам потрібно.

Приклад

Отже для того що б зробити вивід у файл, який знаходиться поруч з скриптом, необхідно виконати на цей код:

#!/bin/bash
  script.dir (){
    echo "`dirname $(script.path)`";
  }

  script.path (){
    echo "`pwd`/$0";
  }


  data="test data";
  file="`script.dir`/done.txt";
  echo "$data" > $file;

Цитати

Шукайте рішення в інтернеті. Багато хто уже вирішив ваші проблеми.

Коментарів: (3)

  1. marek
    marek 2013-07-25 17:05 Відповісти
    баш то страшна мова, всунули б якийсь рубі замість =)
  2. funivan
    funivan 2013-07-25 17:05 Відповісти
    Я згідний, але що зробиш таке життя.
  3. muhasjo
    muhasjo 2013-07-25 17:05 Відповісти
    зато принцип KISS працює =)