[15:56] <mcgiwer> witam. Czy tu mogę zapytać o pomoc w skryptowaniu w bashu?
[16:02] <AleksiejLublov> zapytać możesz, ale czy dostaniesz odpowiedź to inna sprawa :)
[16:04] <mcgiwer> chodzi o to że próbuję napisać funkcję ułatwiającą pobieranie kluczy do repozytoriów i potrzebna mi w tym pomoc
[16:14] <Ashiren> a wiec
[16:17] <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:23] <Ashiren> oahi
[16:23] <Ashiren> hmm
[16:29] <Ashiren> no tak bo \ eskapuje ~~
[16:32] <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:33] <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:35] <Ashiren> tj chodzi ci o a = kupa; kupa = 5; $a == 5
[16:45] <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:47] <BlessJah> dokładnie to co chcesz zrobić mógłbyś przez eval zrobić, ale użyj shift albo `for name ; do...`
[16:48] <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:49] <BlessJah> nie, nie jest "for name [ [ in [ word ... ] ] ; ] do " kwadratowe nawiasy znaczą że coś jest opcjonalne
[16:50] <BlessJah> btw, pytanie "jak pobrać zmienną której nazwa jest w innej zmiennej" a.k.a. $$var to http://xyproblem.info/ ;)
[16:55] <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:56] <BlessJah> foo() { for name; do echo $name; done; } ; foo a b c d
[16:57] <BlessJah> tak, 'for name; do...' to poprawna składnia pętli for w bashu
[17:01] <mcgiwer> próbuję rozgryść dlaczego bash mi nie pozwala używać zakresu (Range) w pętli for i wywala błąd
[17:02] <BlessJah> mcgiwer: klasyczny przykład XY, przeczytaj pierwszy akapit: http://xyproblem.info/
[17:08] <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:09] <BlessJah> mcgiwer: po co chcesz iterować po zakresie 2..$#
[17:10] <mcgiwer> ponieważ czasami trzeba podać na raz więcej kluczy do importu niż jeden, a to miało w tym pomóc
[17:11] <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:13] <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:14] <BlessJah> czyli chcesz iterować po argumentach: specjalna zmienna $@ zawiera listę argumentów
[17:15] <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:16] <mcgiwer> zaraz spróbuję
[17:21] <mcgiwer> coś tam wyświetla, tylko przerzuca do nowej lini
[17:22] <BlessJah> taka uroda echo
[17:30] <BlessJah> mcgiwer: programujesz w jakimś języku innym niż bash?
[17:31] <mcgiwer> tak... w PHP
[17:32] <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:33] <BlessJah> echo jest tutaj całkowicie nieistotne (poza tym powinno pokazywać nowe linie)
[17:34] <BlessJah> foo() { for bar in "$@" ; do  printf "%s " "${bar}" ; done ; } ; foo 1 2 3 4
[17:34] <BlessJah> masz bez newline
[17:36] <mcgiwer> ok. Wyświetla jak chciałem. Teraz pytanie jak to przerobić aby rozbić to na zmienne
[17:37] <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:38] <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:41] <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:42] <BlessJah> http://php.net/manual/en/function.array-shift.php
[17:43] <BlessJah> z tą różnicą, że nie zwraca wartości elementu
[17:48] <mcgiwer> znikam na jakiś czas. Odezwę się jak wrócę
[17:49] <BlessJah> spoko
[21:04] <jacekowski> echo -n nie robi nowej lini
[21:04] <jacekowski> echo bez niczego robi nowa linie
[21:10] <Ashiren> ~ Paulo Coelho
[21:21] <BlessJah> jacekowski: ten ostatni spam doszedl czy nie?