/etc/shrc.d

Maciek Pasternacki maciekp w japhy.fnord.org
Nie, 9 Maj 2004, 22:54:08 CEST


On Setting Orange, Discord 57, 3170 YOLD, Adam Gorzkiewicz wrote:

>> #v+
>> japhy w lizard:~ % mkdir empty                                               
>>                   23:44 japhy w lizard:~ % for F in empty/*.sh; do [ -r $F ]
>> && echo cokolwiek; done                    23:46 zsh: no matches found:
>> empty/*.sh
>> #v-
>>
>> > Co robimy? Przywracamy poprzednią pętelke, czy może tą obecną poprzedzamy
>> > jakimś ifem na obecność *.sh ?
>>
>> Raczej poprzedzić.  Albo for i in `find /etc/shrc.d -name '*.sh'`
>> (mniej forków niż przy jednym ifie, a chyba nie planujemy tam nazw ze
>> spacjami tudzież innych, które trzeba szczególnie cytować).
>
> Hmm... właśnie zauważyłem, że zsh w każdej sytuacji krzyczy "no matches found" 
> - obojetnie, czy dasz 'for i in' `find...`, `ls...` wtf.
>
> (~/rpm/SPECS)$ for i in `ls /etc/shrc.d/*.sh 2>/dev/null`; do echo $i; done
> zsh: no matches found: /etc/shrc.d/*.sh
> (~/rpm/SPECS)$
>
> Nie wiem - jezeli sie znasz na zsh to kombinuj - z pdksh i bashem tego 
> problemu nie ma.

Wystarczy cytować gwiazdki.  To, że bash i pdksh niecytowaną gwiazdkę
przekazują w niezmienionej formie (jako znaczek *) jeśli do wzorca nie
pasuje żaden napis, to jest misfeature, a w najlepszym przypadku
`accidental feature'.

Sprawdź jeszcze w zsh moją wersję (cytowaną wyżej, ale powtórzę w
pełniejszej formie), dokładnie przepisując wszystkie cytaty (one tam
nie są, żeby było ładniej) -- zobaczysz, że się nie będzie pluć:

    for i in `find /etc/shrc.d -name '*.sh'`; do echo "- $i -"; done

Pozdrawiam,
		--dżaf.

-- 
__    Maciek Pasternacki <maciekp w japhy.fnord.org> [ http://japhy.fnord.org/ ]
`| _   |_\  / { ...jaka jest pańska narodowość? -- Jestem pijakiem. Jestem
,|{-}|}| }\/ nieślubnym dzieckiem Bogarta i Marilyn Monroe.  To ja zabiłem
\/   |____/ Laurę Palmer.  To wszystko na ten temat. } ( M. Świetlicki )  -><-



Więcej informacji o liście dyskusyjnej pld-devel-pl