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