Linuksowo.pl - Linux forum

Transkrypt

Linuksowo.pl - Linux forum
Subject: [ROZW] Jak sprawdzić katalog w którym jest skrypt
Posted by Darkhog on Thu, 25 Mar 2010 09:55:39 GMT
View Forum Message <> Reply to Message
Witam, jak sprawdzić w którym katalogu znajduje się skrypt, bo muszę wywołać z
katalogu skryptu inny skrypt. Katalogu z pewnych powodów nie mogę dodać do PATH, a
wynalazki typu pwd czy ./drugi_skrypt.sh odpadają bo chcę, żeby to było niezależne od
aktualnego katalogu w shellu.
Np skrypt jest w katalogu /home/user/skrypty/1/ i nazywa się 1.sh. Teraz chcę uruchomić
go bezpośrednio z home/user/. Wpisuję więc skrypty/1/1.sh. Skrypt ma taką strukturę:
cośtam
...
./2.sh
Oczywiście to nie zadziała jak uruchomię to z /home/user. Będzie błąd informujący,
że nie ma pliku /home/user/2.sh. I teraz jak sprawdzić w którym katalogu jest skrypt? Dodam,
że owe dwa skrypty są częścią większego programu, który będzie
dystrybuowany jako tarball, więc nie będę znał docelowej ścieżki dostępu, wiem
tylko, że będą w tym samym katalogu, więc ścieżka bezwzględna też odpada.
Generalnie zaś $0 by się nadawało, jednak nie znam bashowych komend do operacji na
stringach, aby wyciąć ze ścieżki nazwę skryptu (ostatnie kilka znaków).
Jakieś pomysły?
Subject: Odp: Jak sprawdzić katalog w którym jest skrypt
Posted by heidi on Thu, 25 Mar 2010 13:30:00 GMT
View Forum Message <> Reply to Message
Darkhog napisał(a) dnia czw, 25 marzec 2010 10:55Generalnie zaś $0 by się nadawało,
jednak nie znam bashowych komend do operacji na stringach, aby wyciąć ze ścieżki
nazwę skryptu (ostatnie kilka znaków).
Jakieś pomysły?
nazwa pliku
basename $0
echo ${0##*/}
nazwa katalogu
Page 1 of 8 ---- Generated from
Linuksowe by FUDforum 2.8.1
Linuksowo.pl - Linux forum - Polskie Forum
dirname $0
echo ${0%*/*}
Subject: Odp: Jak sprawdzić katalog w którym jest skrypt
Posted by Darkhog on Thu, 25 Mar 2010 17:56:58 GMT
View Forum Message <> Reply to Message
Wszystko fajnie, tylko jak zrobić, aby podało ścieżkę bezwzględną do skryptu? Tzn.
jak wpiszę skrypty/1/1.sh z /home/user/, to żeby wyświetliło /home/user/skrypty/1, jak ze
/home/user/skrypty wpiszę 1/1.sh tak samo, itd? P.S. Chciałem zrobić sobie przypisanie
$katalog_skryptów=dirname $0, ale pokazało się:
skrypty/1/1.sh: line 3: =dirname: command not found
Subject: Odp: Jak sprawdzić katalog w którym jest skrypt
Posted by adam.chyla on Thu, 25 Mar 2010 20:47:31 GMT
View Forum Message <> Reply to Message
= dirname
Spacje są chyba ważne;
Cytuj:dirname --help
U mnie znalazło.
#!/bin/bash
basename $0
echo ${0##*/}
dirname $0
echo ${0%*/*}
echo "Ścieżka `cd $1; pwd`"
Page 2 of 8 ---- Generated from
Linuksowe by FUDforum 2.8.1
Linuksowo.pl - Linux forum - Polskie Forum
Subject: Odp: Jak sprawdzić katalog w którym jest skrypt
Posted by heidi on Thu, 25 Mar 2010 22:55:12 GMT
View Forum Message <> Reply to Message
Darkhog napisał(a) dnia czw, 25 marzec 2010 06:56 P.S. Chciałem zrobić sobie przypisanie
$katalog_skryptów=dirname $0, ale pokazało się:
skrypty/1/1.sh: line 3: =dirname: command not found
Polecam na poczatek jakies podstawy w programowaniu w shellu
Polskie znaki w nazwach zmiennych ?! ech ...
katalog_skryptow=`dirname $0`
Subject: Odp: Jak sprawdzić katalog w którym jest skrypt
Posted by Darkhog on Fri, 26 Mar 2010 08:22:40 GMT
View Forum Message <> Reply to Message
Dziękuję wszystkim za pomoc, jednak heidi, twój sposób nie działa, bo zamiast driname
command not found pokazuje mi się <nazwa katalogu> command not found. Ale dziękuję.
Już chyba wpadłem na pomysł co zrobię.
//EDIT: Problem rozwiÄ…zany.
Subject: Odp: Jak sprawdzić katalog w którym jest skrypt
Posted by Tomahawk on Fri, 26 Mar 2010 20:49:48 GMT
View Forum Message <> Reply to Message
Darkhog napisał(a) dnia pią, 26 marzec 2010 09:22
//EDIT: Problem rozwiÄ…zany.
Napisz jak ;)
Pozdrawiam
Subject: Odp: [ROZW.]Jak sprawdzić katalog w którym jest skrypt
Posted by Darkhog on Fri, 26 Mar 2010 22:01:21 GMT
View Forum Message <> Reply to Message
Właściwie potrzebowałem tylko przejść do odpowiedniego folderu, więc wystarczyło
napisać:
Page 3 of 8 ---- Generated from
Linuksowe by FUDforum 2.8.1
Linuksowo.pl - Linux forum - Polskie Forum
cd ${0%*/*}
//EDIT: Inna sprawa że nie rozumiem tego kodu, chociaż bardzo bym chciał. Tzn. wiem,
że cd to zmiana katalogu, ale co dalej, to już nie...
Subject: Odp: [ROZW.]Jak sprawdzić katalog w którym jest skrypt
Posted by heidi on Sun, 28 Mar 2010 01:59:12 GMT
View Forum Message <> Reply to Message
Darkhog napisał(a) dnia pią, 26 marzec 2010 11:01
cd ${0%*/*}
//EDIT: Inna sprawa że nie rozumiem tego kodu, chociaż bardzo bym chciał. Tzn. wiem,
że cd to zmiana katalogu, ale co dalej, to już nie...
http://www.tldp.org/LDP/abs/html/string-manipulation.html
Subject: Odp: Jak sprawdzić katalog w którym jest skrypt
Posted by Darkhog on Sun, 23 Jan 2011 07:08:54 GMT
View Forum Message <> Reply to Message
Właśnie się dowiedziałem że ten kod:
dirname $0
echo ${0%*/*}
nie działa dla katalogów ze spacjami czyli jak mamy coś takiego:
"super długa/nazwa jakiegoś/durnego katalogu"
to jak wykonamy powiedzmy z katalogu "nazwa jakiegoś" (pwd=/home/ja/super długa/nazwa
jakiegoś) powiedzmy "durnego katalogu/skrypt.sh" to będzie cd próbowało wejść do
katalogu "durnego", którego oczywiście nie ma! Tak, dzieje się to nawet jak wpiszę w linii
komend w cudzysłowach ścieżkę do skryptu.
Subject: Odp: [ROZW.]Jak sprawdzić katalog w którym jest skrypt
Posted by b00rt00s on Sun, 23 Jan 2011 09:58:35 GMT
View Forum Message <> Reply to Message
A to ciekawe. Wykonałem takie dwie komendy:
test="/home/aaa bbb/ccc aaa"
Page 4 of 8 ---- Generated from
Linuksowe by FUDforum 2.8.1
Linuksowo.pl - Linux forum - Polskie Forum
echo ${test%*/*}
i otrzymałem wynik:
/home/aaa bbb
Co oznacza, że spacje niczym nie przeszkadzają.
Subject: Odp: [ROZW.]Jak sprawdzić katalog w którym jest skrypt
Posted by hwast on Sun, 23 Jan 2011 16:27:28 GMT
View Forum Message <> Reply to Message
b00rt00s - echo ci wyświetli, ale cd wypluje, że nie znaleziono /home/aaa
Subject: Odp: [ROZW.]Jak sprawdzić katalog w którym jest skrypt
Posted by heidi on Sun, 23 Jan 2011 17:28:32 GMT
View Forum Message <> Reply to Message
hwast napisał(a) dnia nie, 23 styczeń 2011 05:27b00rt00s - echo ci wyświetli, ale cd wypluje,
że nie znaleziono /home/aaa
dlatego trzeba użyć "" albo jeszcze lepiej nie używać spacji w nazwach plików bo to zły
nawyk :)
Subject: Odp: [ROZW.]Jak sprawdzić katalog w którym jest skrypt
Posted by Darkhog on Mon, 24 Jan 2011 02:16:36 GMT
View Forum Message <> Reply to Message
heidi, tylko, że jak wpisywałem ścieżkę do skryptu, to użyłem cudzysłowów. Log z
konsoli:
darkhog@localhost:~>"aaa bbb/skrypt.sh"
cd: Nie można przejść do katalogu aaa. No such file or directory.
Oczywiście wszystkie wrażliwe dane zostały zamaskowane.
Subject: Odp: [ROZW.]Jak sprawdzić katalog w którym jest skrypt
Posted by b00rt00s on Mon, 24 Jan 2011 05:52:23 GMT
View Forum Message <> Reply to Message
Page 5 of 8 ---- Generated from
Linuksowe by FUDforum 2.8.1
Linuksowo.pl - Linux forum - Polskie Forum
Darkhog napisał(a) dnia pon, 24 styczeń 2011 03:16heidi, tylko, że jak wpisywałem
ścieżkę do skryptu, to użyłem cudzysłowów. Log z konsoli:
darkhog@localhost:~>"aaa bbb/skrypt.sh"
cd: Nie można przejść do katalogu aaa. No such file or directory.
Oczywiście wszystkie wrażliwe dane zostały zamaskowane.
:d A czy skrypt.sh o katalog? Musisz usunąć nazwę skryptu ze ścieżki, inaczej nie
zadziała. Nazwa katalogu powinna zatem wyglądać tak: "aaa bbb". Możesz ewentualnie
wykonać wykonać skrypt bez przechodzenia do katalogu, zwyczajnie pisząc:
aaa bbb/skrypt.sh lub jeśli nie zadziała:aaa bbb/./skrypt.sh
Subject: Odp: [ROZW.]Jak sprawdzić katalog w którym jest skrypt
Posted by Darkhog on Mon, 24 Jan 2011 08:56:02 GMT
View Forum Message <> Reply to Message
b00rt00s, za przeproszeniem pie*dolisz. Jak bym napisał tak:
aaa bbb/skrypt.sh
to jakbym próbował wywołać polecenie aaa z parametrem bbb/skrypt.sh. Z kolei drugi kod
też nie zadziała, bo próbowałem.
// Polecam rumianek przed napisaniem kolejnego postu. Nie ładnie tak pisać do kolegów.
Jeszcze jakbyś emotke wstawił to mogłbym zrozumieć, ale tak to pierwsze ostrzeżenie.
Za kilka kolejnych czeka nagroda w postaci rangi pedobeara :)
// Stiffler
Subject: Odp: [ROZW.]Jak sprawdzić katalog w którym jest skrypt
Posted by b00rt00s on Mon, 24 Jan 2011 12:09:54 GMT
View Forum Message <> Reply to Message
Darkhog napisał(a) dnia pon, 24 styczeń 2011 09:56b00rt00s, za przeproszeniem pie*dolisz.
Weź się człowieku uspokój, przecież próbuję Ci pomóc. Zwyczajnie zapomniałem
wziąć ścieżkę w cudzysłowy. Powinno zatem być:
"aaa bbb"/skrypt.sh
Podobnie mógłbyś napisać:
"aaa bbb/ccc ddd"/skrypt.sh
P.S. Zanim kogoś obrazisz, wysil mózgownicę. Już pisaliśmy w tym wątku, że
Page 6 of 8 ---- Generated from
Linuksowe by FUDforum 2.8.1
Linuksowo.pl - Linux forum - Polskie Forum
należy brać ścieżki w cudzysłowy. Tak trudno na to wpaść? A może nie umiesz
czytać?
Subject: Odp: [ROZW.]Jak sprawdzić katalog w którym jest skrypt
Posted by heidi on Mon, 24 Jan 2011 12:16:53 GMT
View Forum Message <> Reply to Message
Darkhog napisał(a) dnia pon, 24 styczeń 2011 03:16heidi, tylko, że jak wpisywałem
ścieżkę do skryptu, to użyłem cudzysłowów. Log z konsoli:
darkhog@localhost:~>"aaa bbb/skrypt.sh"
cd: Nie można przejść do katalogu aaa. No such file or directory.
Oczywiście wszystkie wrażliwe dane zostały zamaskowane.
to ja nie wiem jak ty używasz cudzysłowów ale najwidzoczniej robisz to źle.
#!/bin/sh
dname="aaa bbb ccc"
mkdir -v "$dname"
fname="$dname/plik.txt"
touch "$fname"
echo $fname
dirname "$fname"
echo ${fname%*/*}
pwd
cd "${fname%*/*}"
pwd
cd pwd
cd "`dirname \"$fname\"`"
pwd
cd pwd
rm -r "$dname"
jak widzisz działa
Bardziej obrazowo już ci tego nie wytłumaczę :)
Page 7 of 8 ---- Generated from
Linuksowe by FUDforum 2.8.1
Linuksowo.pl - Linux forum - Polskie Forum
Subject: Odp: [ROZW.]Jak sprawdzić katalog w którym jest skrypt
Posted by hwast on Mon, 24 Jan 2011 16:36:25 GMT
View Forum Message <> Reply to Message
Cytuj:za przeproszeniem pie*dolisz
chamskie odzywki to moja działka! :lol:
Page 8 of 8 ---- Generated from
Linuksowe by FUDforum 2.8.1
Linuksowo.pl - Linux forum - Polskie Forum

Podobne dokumenty