Bash katalog ze skryptem

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
sauron
Sędziwy Jeż
Sędziwy Jeż
Posty: 45
Rejestracja: 13 cze 2009, 11:30
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64

Bash katalog ze skryptem

Post autor: sauron »

Witam, chcę użyć katalogu w którym znajduje się skrypt i jego pliki. Katalog na pewno się będzie zmieniał i dlatego chcę w jakiś sposób rozwiązać problem dowiązań w skrypcie do plików w tym katalogu.
Próbowałem na rożne sposoby z kropką, z $0, ale nic z tego mi nie wyszło.

Chcę aby to wyglądało mniej więcej tak: mam katalog i w nim skrypt i jakieś pliki i chciałbym otworzyć te pliki skryptem znajdującym się w tym katalogu. Chcę uniknąć pisania ścieżki np. /home/, bo jak się zmieni ścieżka katalogu to skrypt nie zadziała :(

Mam nadzieję, że ktoś będzie w stanie pomóc :]

Pozdrawiam
Awatar użytkownika
borzole
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 127
Rejestracja: 10 sie 2010, 11:48
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: Bash katalog ze skryptem

Post autor: borzole »

Kod: Zaznacz cały

#!/bin/bash

abs_dir_path="$(readlink -f `dirname $0`)"
abs_file_path="$(readlink -f `dirname $0`)/$(basename $0)"

ls "$abs_dir_path"/*

echo "$abs_file_path"
Awatar użytkownika
sauron
Sędziwy Jeż
Sędziwy Jeż
Posty: 45
Rejestracja: 13 cze 2009, 11:30
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64

Odp: Bash katalog ze skryptem

Post autor: sauron »

Niestety to nie działa :(

Jeżeli skrypt ma nazwę qwerty to dostaję taki zwrot: ścieżka do skrytpu/qwerty
Tyle samo z $0 otrzymywałem :(
Awatar użytkownika
borzole
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 127
Rejestracja: 10 sie 2010, 11:48
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: Bash katalog ze skryptem

Post autor: borzole »

Ok, źle zrozumiałem. Myślałem, że chcesz mieć ścieżkę absolutną (to nie zawsze to samo co $0, czy pwd).
Postaraj się lepiej opisać co chcesz zrobić i jaki ma być końcowy efekt. Dlaczego katalog się będzie zmieniał? To ma być zależne od instalacji?
Więcej szczegółów proszę.
Awatar użytkownika
sauron
Sędziwy Jeż
Sędziwy Jeż
Posty: 45
Rejestracja: 13 cze 2009, 11:30
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64

Odp: Bash katalog ze skryptem

Post autor: sauron »

Ma to działać tak:
Mam katalog o nazwie skrypt np. tutaj: "/home/user/Skrypt"
w środku mam skrypt o nazwie np. "1.sh" oraz plik txt o nazwie "plik.txt", chcę aby skrypt wykorzystywał plik.txt (otwierał, kopiował gdzie indziej itd.)
jeżeli wywołam $0 to dostaję zwrot : "/home/user/Skrypt/1.sh", a bardziej pragnąłbym ścieżki samej tzn. "/home/user/Skrypt" to wtedy już plik zawsze będzie ok bo jak skopiuję cały katalog np. na "/Skrypt" to plik txt będzie się znajdował tu: "/Skrypt/plik.txt".

Potrzebuję ścieżki skryptu po prostu, bez samej nazwy skryptu :)
W pierwszym wypadku "/home/user/Skrypt" a w drugim "/Skrypt".

Mam nadzieję że już teraz napisałem to jakoś zrozumiale :]
Awatar użytkownika
ethanak
Wygnańcy
Posty: 3054
Rejestracja: 04 gru 2007, 13:19
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Lokalizacja: Bielsko-Biała
Kontakt:

Odp: Bash katalog ze skryptem

Post autor: ethanak »

sauron pisze:Mam nadzieję że już teraz napisałem to jakoś zrozumiale :]
Napisałeś zrozumiale, ale sposób myslenia masz windowsiany.

Takie coś akurat jest niemożliwe do zrealizowania (choćby ze względu na istnienie hardlinków), nie jesteś w stanie stwierdzić gdzie w rzeczywistości siedzi wykonywany skrypt/program. W Windowsie jest to możliwe, ale tam akurat hardlinków nie ma, a ichniejsze "skróty" to niezupełnie to samo co Uniksowe softlinki.

Nie wiem jak przy skryptach (nie próbowałem), ale przy normalnej binarce, jeśli nie jest to jakiś link, to można wydłubać rzeczywiste położenie programu z proca - coś w stylu /proc/<twój_pid>/exe. Tyle że na tym bym nie polegał.

Pytanie: dlaczego nie chcesz zrobić tego po ludzku (tzn. jakiś instalator)?
Кто жопой родился, чижиком не помрёт
Awatar użytkownika
borzole
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 127
Rejestracja: 10 sie 2010, 11:48
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: Bash katalog ze skryptem

Post autor: borzole »

Albo ja nie umiem czytać ze zrozumieniem, albo Ty nadal coś plączesz.
Potrzebuję ścieżki skryptu po prostu, bez samej nazwy skryptu
no to Ci podałem, tyle że Ty nie potrafisz z tego skorzystać:
abs_dir_path - absolutna ścieżka do katalogu
abs_file_path - absolutna ścieżka do skryptu
Polecenie readlink -f rozwija zwykłe linki nawet jeśli jest to link na link na link ...itd.
Poza tym zawsze można obciąć ostatni człon ścieżki tak ${0##/*} lub użyć dirname $0
Nie próbowałem nigdy sprawdzać odwołań do twardych linków, ale też można, bo mi kiedyś system wywalał błąd a pro po ilości odwołań (skoro wie ile ich jest, to musi też wiedzieć gdzie są).
Rozumiemy się, czy nadal nie? :)
Awatar użytkownika
ethanak
Wygnańcy
Posty: 3054
Rejestracja: 04 gru 2007, 13:19
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Lokalizacja: Bielsko-Biała
Kontakt:

Odp: Bash katalog ze skryptem

Post autor: ethanak »

borzole pisze:Albo ja nie umiem czytać ze zrozumieniem, albo Ty nadal coś plączesz.
Stawiałbym na oba ;)
Nie próbowałem nigdy sprawdzać odwołań do twardych linków, ale też można, bo mi kiedyś system wywalał błąd a pro po ilości odwołań (skoro wie ile ich jest, to musi też wiedzieć gdzie są).
Wie ile, wie gdzie, ale hardlinki są nieodróżnialne. Czyli nie ma tak jakw Windowsie że "exe siedzi w c:\gdzieś\tam" i tam siedzi. Jeśli zrobię coś w stylu:

Kod: Zaznacz cały

echo 'HORTENSJA' > /tmp/HORTENSJA.txt
ln /tmp/HORTENSJA.txt /var/lib/HORTENSJA
to ten sam (nie taki sam, a ten sam) plik będzie widziany jako "/tmp/HORTENSJA.txt" i "var/lib/HORTENSJA".
Czyli jeśli zrobię sobie katalog typu "/o/jejku/jaki/fajny/katalog" i "/mnt/disk/spartolony/", w katalogu "/mnt/disk/spartolony" umieszczę plik "wybitnie.txt" a potem zrobię:

Kod: Zaznacz cały

ln /mnt/disk/spartolony/wybitnie.txt /o/jejku/jaki/fajny/katalog/zplikiem.txt
[code]
oba pliki będą równorzędne.

I co wtedy powiesz na istnienie jakiegoś "cośtam.txt" w tym samym katalogu? Który to mianowicie jest "ten sam"?

PS. Proszę uprzejmie Pana Administratora o zamianę "HORTENSJA" na "begonia" :)
Кто жопой родился, чижиком не помрёт
Awatar użytkownika
borzole
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 127
Rejestracja: 10 sie 2010, 11:48
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: Bash katalog ze skryptem

Post autor: borzole »

wiem czym są hardlinki, ale nie wiem, o co chodzi sauronowi (że o pierścieniu nie wspomnę) :)
Awatar użytkownika
sauron
Sędziwy Jeż
Sędziwy Jeż
Posty: 45
Rejestracja: 13 cze 2009, 11:30
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64

Odp: Bash katalog ze skryptem

Post autor: sauron »

Problem już rozwiązany, a sposób było prozaiczne i wygląda tak:

Kod: Zaznacz cały

dirname $0
Dzięki za wszystkie odpowiedzi. Tylko o to mi chodziło. Czy ja wiem czy windowsiany, nie siedziałem na windowsie już dobrych 6 lat w ogóle, a w poście #5 chciałem opisać wszystko jak najprościej, aby nic nie zamotać.

PS. Pierścień chwilowo jest poza moim wzrokiem, ale cały czas Nazgule poszukują :)
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 25 gości