<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><title>Jogger Minia :: komentarze do wpisu &quot;Popularne błędy popełniane podczas pisania skryptów powłoki&quot;</title><link>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/</link><description>Wpisy z dziennika internetowego Jogger, wspomaganego przez Jabbera</description><lastBuildDate>Thu, 17 May 2012 07:54:04 +0200</lastBuildDate><generator>JoggerPL</generator><item><title>D4rky</title><link>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1468449</link><description>Niezłe! Jak będę miał czas przepisać od nowa rsget-moda to na pewno wezmę to pod uwagę.

BTW, twój tekst o psychice, chronieniu dzieci itd. już dawno przestał być zabawny, a jest wkurzający przy wchodzeniu. Może czas się go pozbyć?
</description><pubDate>Sat, 21 Nov 2009 22:36:06 +0100</pubDate><guid>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1468449</guid></item><item><title>Zbigniew Czernik</title><link>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1468452</link><description>A co to za sympatyczna zajawka? http://zetline.pl/temp/skrin.jpg
</description><pubDate>Sat, 21 Nov 2009 22:42:47 +0100</pubDate><guid>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1468452</guid></item><item><title>Minio</title><link>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1468455</link><description>D4: po kliknięciu na „nie” w ciachu jest zapisywana informacja aby więcej komunikatu nie wyświetlać. Jeżeli regularnie czyścisz ciacha (to moje ma ustawione absurdalnie długi czas trwania — 1000 lat od daty utworzenia — więc na pewno samo nie wygasło) to polecam albo wyłączyć obsługę ciastek dla witryny albo obsługę JS. Wtedy również się nie wyświetla.

Komunikat jest częścią obrazu bloga który sobie wymyśliłem przed dokonywaniem modyfikacji. W zamyśle blog — przede wszystkim — nie miał być techniczny. Rozumiem że przy wpisach takich jak ten może to irytować, ale czytelnicy wpisów takich jak ten nie są targetem bloga jako całości.
</description><pubDate>Sat, 21 Nov 2009 22:56:00 +0100</pubDate><guid>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1468455</guid></item><item><title>Mekk</title><link>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1468488</link><description>Był czas (już trochę temu), gdy przy ustawionym polskim środowisku sypał się emacsowy dired i musiałem pisać dlań swoje ls (LANG=C ls). O format dat szło.

A nieco obok Twojego tekstu dodam, że pisałem swego czasu dość sporo skryptów ale doszedłem ostatecznie do wniosku, że jeśli coś ma więcej niż kilka linijek, zaczyna odpalać parokrotnie seda czy awka, miewa parę ifów czy pętle, to należy to machnąć w perlu a nie w shellu.
</description><pubDate>Sun, 22 Nov 2009 01:04:51 +0100</pubDate><guid>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1468488</guid></item><item><title>azhag</title><link>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1468524</link><description>Pomyślałem jeszcze o mnożeniu grepa:

grep -v fraza1 plik.txt | grep -v fraza2 # źle
grep -v -e fraza1 -e fraza2   plik.txt            # dobrze


Ponadto czasami wc jest niepotrzebny, gdyż dany program ma opcję służącą do liczenia, np.:

grep fraza plik.txt | wc -l     # źle
grep -c fraza plik.txt          # dobrze


Ogólnie: popularnym błędem jest nieczytanie pomocy i manuali. ;)</description><pubDate>Sun, 22 Nov 2009 11:28:07 +0100</pubDate><guid>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1468524</guid></item><item><title>janosik</title><link>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1468550</link><description>regułę KISS zastąpiłbym regułą  BUZI (Bez Udziwnień Zapisuj Idioto)  :P
a tak na poważnie to merytorycznie tekst mi się bardzo podoba i aż się zarumieniłem patrząc że niektóre wymienione jako błędne skrypty wyglądają jakoś tak &quot;znajomo&quot; :( (tzn. u mnie takich pełno)
</description><pubDate>Sun, 22 Nov 2009 12:33:41 +0100</pubDate><guid>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1468550</guid></item><item><title>Stanisław 'dozzie' Klekot</title><link>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1468893</link><description>
  TEMPORARY_FILE=$(mktemp) || (echo 'nie udało się stworzyć pliku tymczasowego'; exit 1)


Erm. How is this supposed to work? Jeśli się nie uda, to uruchom podpowłokę i z tej podpowłoki wyjdź z kodem 1? To w ogóle niemal głupota używać || do sterowania wykonaniem poleceń. Powinieneś dorzucić to jako kolejny popularny błąd.


  if ! TEMPORARY_FILE=$(mktemp); then echo &quot;blablabla&quot;; exit 1; fi

</description><pubDate>Mon, 23 Nov 2009 13:49:59 +0100</pubDate><guid>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1468893</guid></item><item><title>azhag</title><link>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1469093</link><description>@Stanisław 'dozzie' Klekot: używanie &amp;&amp; oraz || do sterowania nie jest bynajmniej błędęm. Prędzej za błąd bym uznał nadużywanie if-ów (oczywiście &amp;&amp; i || też można nadużywać, ale to nie jest ten przypadek).

Nie została też uruchomiona podpowłoka — () to nie $().
</description><pubDate>Mon, 23 Nov 2009 21:56:34 +0100</pubDate><guid>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1469093</guid></item><item><title>Minio</title><link>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1469129</link><description>Dozzie: odnośnie () masz rację. Nie wiedziałem że wykonuje to kod w podpowłoce, a swojego przykładu nie sprawdziłem w praktyce. Usunąłem go w związku z tym z wpisu. 

Nie mogę się jednak z Tobą zgodzić że używanie || (czy &amp;&amp;) jest głupie. Jakkolwiek osobiście również nie stosuję tych konstrukcji (są wg mnie dużo mniej czytelne), znam kilka osób które cenią je sobie za zwięzłość. Ostatecznie to konstrukcje takie same jak każde inne.
</description><pubDate>Mon, 23 Nov 2009 23:32:18 +0100</pubDate><guid>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1469129</guid></item><item><title>Stanisław 'dozzie' Klekot</title><link>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1469142</link><description>Ale używanie || i &amp;&amp; jako instrukcji sterujących jest z reguły głupotą. Jeśli to ma być if, to niech to będzie normalny if, a nie jakaś podróbka na jedną komendę. Wtedy widać że to jest warunkowe wykonanie. Poza tym nie trzeba wprowadzać jakichś dzikich hacków na shell w postaci {} i (), żeby tylko zestaw instrukcji się wykonał. No i if-else-fi nie wprowadza problemu niezerowego kodu błędu w ostatniej instrukcji bloku dla spełnionego testu (test &amp;&amp; nabla || foo; jeśli nabla zawiedzie, to foo się wykona). &amp;&amp; i || mają sens właściwie wyłącznie w warunkach do łączenia ze sobą kodów błędu kilku różnych komend.
</description><pubDate>Tue, 24 Nov 2009 00:33:52 +0100</pubDate><guid>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1469142</guid></item><item><title>mina86</title><link>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1469396</link><description>http://partmaps.org/era/unix/award.html
</description><pubDate>Tue, 24 Nov 2009 21:18:07 +0100</pubDate><guid>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1469396</guid></item><item><title>AlchemyX</title><link>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1469547</link><description>Fajny tekst, myślałem na początku, że będą same oczywistości a okazuje się, że i ja popełniam pewne tego typu błędy. Dzięki :)
</description><pubDate>Wed, 25 Nov 2009 09:34:55 +0100</pubDate><guid>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1469547</guid></item><item><title>Minio</title><link>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1469832</link><description>mina86: dzięki za link. Myślę że wraz z wspomnianym we wstępie do tekstu bash pitfalls, artykuł ten stanowi podstawę z którą należy się zapoznać chcąc pisać skrypty powłoki.
</description><pubDate>Wed, 25 Nov 2009 21:16:49 +0100</pubDate><guid>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1469832</guid></item><item><title>Szymon</title><link>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1503454</link><description>Piszesz: 


  zdecydowana większość (w tej chwili nie potrafię podać żadnego wyjątku, ale dopuszczam możliwość ich występowania) programów operujących na tekście przyjmuje plik na którym ma pracować jako argument


Najbardziej znany wyjątek to tr. Warto może też wspomnieć, że większość programów, które pozwalają podać nazwy plików w argumentach, interpretuje '-' jako stdin - dzięki temu można np. użyć zabawnej konstrukcji: paste - - &amp;lt;plik.

I jeszcze przy okazji: pc -C apache pokaże wszystkie procesy wykonujące program apache, ale już np. apache2 czy apachectl nie - a ps -e|grep apache tak, co może być efektem zamierzonym.
</description><pubDate>Thu, 25 Feb 2010 08:43:05 +0100</pubDate><guid>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1503454</guid></item><item><title>Minio</title><link>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1503626</link><description>Tak, właśnie tr miałem na myśli gdy pisałem tamto zdanie, ale wtedy nie mogłem sobie przypomnieć tego programu (nie wiem czy kiedykolwiek miałem potrzebę z niego korzystać). Później w innym miejscu mi o nim przypomniano.

A jeśli chodzi o ps — zgadzam się. Ale uważam również że osoby które potrzebują tego typu informacji są wystarczająco zaawansowanymi użytkownikami aby wiedzieć, że łączenie grep-a z ps-em nie jest bluźnierstwem i jest jak najbardziej dozwolone w pewnych sytuacjach. Jednocześnie sądzę że w zdecydowanej większości przypadków ps -C w zupełności wystarcza i nie ma potrzeby odwoływania się do pomocy grep-a.
</description><pubDate>Thu, 25 Feb 2010 15:34:48 +0100</pubDate><guid>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1503626</guid></item><item><title>pag-r</title><link>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1503671</link><description>ps -C aptana
  PID TTY          TIME CMD
ps -C Aptana
  PID TTY          TIME CMD
ps aux | grep aptana
pag-r     5710 14.3  8.9 2966260 356248 ?      Sl   17:43   0:37 /usr/bin/java -Xms40m -Xmx512m -Djava.awt.headless=true -XX:MaxPermSize=256m -jar /home/pag-r/Aptana Studio 2.0/...
Widać polecenie ps -C nie zawsze działa jak powinno :)
Ale sam artykuł dobry co do cat|grep faktycznie tak robiłem :)
</description><pubDate>Thu, 25 Feb 2010 17:51:29 +0100</pubDate><guid>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1503671</guid></item><item><title>Minio</title><link>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1503735</link><description>pag-r: działa jak powinno, tylko Ty nie wiesz że oczekujesz czegoś czego opcja -C Ci nie zapewni.

Porównaj wyniki:

ps o comm -C java
ps o args -C java


Opcja -C wyszukuje procesy po nazwie, a nazwą jest tylko ścieżka wykonywalna. 
Opcja -C nie sprawdza czy argument znajduje się gdziekolwiek w nazwie procesu i przekazanych mu argumentach — a właśnie tak jest w przypadku o którym mówisz.

Gdybyś uruchomił jakiś program przez bash /usr/bin/some_program, to informacje o nim znajdziesz przez ps -C bash (a najlepiej ps o pid,tty,time,args -C bash, żeby móc zidentyfikować ten konkretny proces), a nie ps -C some_program.

Ponieważ ps nie oferuje żadnej opcji do przeszukiwania tablicy procesów po przekazanych im argumentach, w tym i podobnych przypadkach oczywiście grepowanie jest jedynym sposobem by zidentyfikować dany proces.
</description><pubDate>Thu, 25 Feb 2010 20:08:37 +0100</pubDate><guid>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1503735</guid></item><item><title>pag-r</title><link>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1503778</link><description>no chyba ze tak, nie czytalem mana, w kazdym razie kilka przydatnych informacji znalazlem w arcie:)
</description><pubDate>Thu, 25 Feb 2010 21:27:01 +0100</pubDate><guid>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1503778</guid></item><item><title>depesz</title><link>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1582323</link><description>usuwanie plików tymczasowych przez wpisanie 'rm &quot;$temporary_file&quot;' jest zdecydowanie kiepskim pomysłem.

Zdecydowanie lepszym jest skorzystanie z trap.

Np. tak:

tempfile=&quot;$( mktemp )&quot;
trap 'rm &quot;$tempfile&quot;' EXIT
</description><pubDate>Tue, 08 Feb 2011 14:14:45 +0100</pubDate><guid>http://minio.jogger.pl/2009/11/21/popularne-bledy-popelniane-podczas-pisania-skryptow-powloki/#c1582323</guid></item></channel></rss>
