mcgiwer | witam. Czy tu mogę zapytać o pomoc w skryptowaniu w bashu? | 15:56 |
---|---|---|
AleksiejLublov | zapytać możesz, ale czy dostaniesz odpowiedź to inna sprawa :) | 16:02 |
mcgiwer | chodzi o to że próbuję napisać funkcję ułatwiającą pobieranie kluczy do repozytoriów i potrzebna mi w tym pomoc | 16:04 |
Ashiren | a wiec | 16:14 |
mcgiwer | wstępna wersja wygląda tak: http://wklej.org/id/2962090/ | 16:17 |
mcgiwer | problem w tym, że \$$a nie będzie prawdopodobnie traktowana jako zmienna | 16:17 |
Ashiren | oahi | 16:23 |
Ashiren | hmm | 16:23 |
Ashiren | no tak bo \ eskapuje ~~ | 16:29 |
mcgiwer | jak bym dał $$ to by mi wstawił ID procesu z literą a zamiast zamienić $a na wartość którą daje pętla for i poprzedzenie ją znakiem $, co spowodowało by zamianę tej wartości na zmienną | 16:32 |
mcgiwer | chodzi o to żeby \$$a zamieniło się w zmienną np. $2 | 16:32 |
mcgiwer | (w zależności od aktualnej wartości dla $a) | 16:33 |
Ashiren | zmienna zmiennej? | 16:33 |
Ashiren | http://stackoverflow.com/questions/10757380/bash-variable-variables | 16:33 |
Ashiren | tj chodzi ci o a = kupa; kupa = 5; $a == 5 | 16:35 |
mcgiwer | nie do końca... chodzi o to że zmienna $a może przybrać wartość od 2 do liczby podanych argumentów | 16:45 |
BlessJah | mcgiwer: jeśli piszesz w bashu (a nie sh), to używaj [[ ]] do testów, jeśli chcesz iterować po $1 $2 $3 itd, to man bash i szukaj shift w sekcji 'SHELL BUILTIN COMMANDS', albo pętla for w SHELL GRAMMAR, w Compund commands | 16:45 |
BlessJah | dokładnie to co chcesz zrobić mógłbyś przez eval zrobić, ale użyj shift albo `for name ; do...` | 16:47 |
BlessJah | mcgiwer: poza tym http://www.shellcheck.net/ | 16:48 |
mcgiwer | BlessJah: nie mam jeszcze tak dużej wprawy w pisaniu w bash-u... poza tym, jeśli looknąłeś do mojej "wklejki" to tam możesz zobaczyć, że pętla for jest w podanym przez ciebie formacie: for name ; do... | 16:48 |
BlessJah | nie, nie jest "for name [ [ in [ word ... ] ] ; ] do " kwadratowe nawiasy znaczą że coś jest opcjonalne | 16:49 |
BlessJah | btw, pytanie "jak pobrać zmienną której nazwa jest w innej zmiennej" a.k.a. $$var to http://xyproblem.info/ ;) | 16:50 |
mcgiwer | @BlessJah: poprawiłem trochę kod i dostałem błąd jedynie w miejscu for gdzie użyłem zakresu: "Bash doesn't support variables in brace range expansions." | 16:55 |
BlessJah | foo() { for name; do echo $name; done; } ; foo a b c d | 16:56 |
BlessJah | tak, 'for name; do...' to poprawna składnia pętli for w bashu | 16:57 |
mcgiwer | próbuję rozgryść dlaczego bash mi nie pozwala używać zakresu (Range) w pętli for i wywala błąd | 17:01 |
BlessJah | mcgiwer: klasyczny przykład XY, przeczytaj pierwszy akapit: http://xyproblem.info/ | 17:02 |
mcgiwer | wiem co jest błędem, ale nie wiem jak go rozwiązać, ponieważ chcę aby pętla for przyjmowała zakres od 2 do liczby podanych argumantów, ale wywala że zakres nie akceptuje zmiennych | 17:08 |
BlessJah | mcgiwer: po co chcesz iterować po zakresie 2..$# | 17:09 |
mcgiwer | ponieważ czasami trzeba podać na raz więcej kluczy do importu niż jeden, a to miało w tym pomóc | 17:10 |
BlessJah | czyli chcesz iterować po kluczach które podałeś? | 17:11 |
mcgiwer | próba wklejenia ich jako 1 argument może nie zadziałać poprawnie | 17:11 |
BlessJah | czyli chcesz po prostu iterować po argumentach? | 17:13 |
mcgiwer | chciałem zrobić tak: pierwszy argument to URL serwera kluczy, a następne to ID kluczy | 17:13 |
BlessJah | czyli chcesz iterować po argumentach: specjalna zmienna $@ zawiera listę argumentów | 17:14 |
mcgiwer | tak, ale trzeba najpierw jakieś argumenty zdefiniować żeby miało co pokazać ;) | 17:15 |
BlessJah | możesz użyć jej tak foo() { for bar in "$@" ; do echo "Arg: ${bar}" ; done } ; foo 1 2 3 4 | 17:15 |
mcgiwer | zaraz spróbuję | 17:16 |
mcgiwer | coś tam wyświetla, tylko przerzuca do nowej lini | 17:21 |
BlessJah | taka uroda echo | 17:22 |
BlessJah | mcgiwer: programujesz w jakimś języku innym niż bash? | 17:30 |
mcgiwer | tak... w PHP | 17:31 |
BlessJah | http://php.net/manual/en/control-structures.foreach.php | 17:32 |
mcgiwer | a echo nie powinno wyrzucać do nowej lini... takie działanie daje echo -e "\n" | 17:32 |
BlessJah | for value in "$@" | 17:32 |
BlessJah | echo jest tutaj całkowicie nieistotne (poza tym powinno pokazywać nowe linie) | 17:33 |
BlessJah | foo() { for bar in "$@" ; do printf "%s " "${bar}" ; done ; } ; foo 1 2 3 4 | 17:34 |
BlessJah | masz bez newline | 17:34 |
mcgiwer | ok. Wyświetla jak chciałem. Teraz pytanie jak to przerobić aby rozbić to na zmienne | 17:36 |
mcgiwer | jak wspomniałem wcześniej, chciał bym aby $1 było url klucza a reszta ID klucza | 17:37 |
BlessJah | s/url klucza/url serwera/ | 17:37 |
BlessJah | mcgiwer: to już są zmienne, moja pętla robi (prawie) to samo co twoja gdyby \$$n działało | 17:38 |
mcgiwer | sorki... miało być: $1 było url serwera, a reszta url kluczy | 17:38 |
BlessJah | foo() { url="$1" ; shift ; for bar in "$@" ; do printf "%s %s\n" "${url}" "${bar}" ; done ; } ; foo http 2 3 4 | 17:41 |
BlessJah | nowa rzecz to shift przed pętlą for | 17:41 |
BlessJah | http://php.net/manual/en/function.array-shift.php | 17:42 |
BlessJah | z tą różnicą, że nie zwraca wartości elementu | 17:43 |
mcgiwer | znikam na jakiś czas. Odezwę się jak wrócę | 17:48 |
=== mcgiwer is now known as mcgiwer_AWAY | ||
BlessJah | spoko | 17:49 |
jacekowski | echo -n nie robi nowej lini | 21:04 |
jacekowski | echo bez niczego robi nowa linie | 21:04 |
Ashiren | ~ Paulo Coelho | 21:10 |
BlessJah | jacekowski: ten ostatni spam doszedl czy nie? | 21:21 |
Generated by irclog2html.py 2.7 by Marius Gedminas - find it at mg.pov.lt!