<div> Diferenta intre bash si cmd este din cauza ca ele parseaza diferit linia de comanda data de tine. Cred ca cmd da "orbeste" string-ul la CreateProcess (dupa expandari), pe cand bash se comporta diferit. Nu bag mana in foc de unde e diferenta, depinde si de metoda cu care ai obtinut lista rezultata de parametri.
</div>
<div> In principiu nu ar trebui sa te intereseze aceasta diferenta deoarece implementezi un shell nou cu un parser nou. Parserul imita in mare comportamentul bash, dar nu este identic cu el si nici nu se cere sa fie. Trebuie doar sa ai grija ca parametrii dati de parser sa ajunga bine la procesul creat. In parserul temei "" se folosesc pentru a permite expandarea de variabile si '' pentru a nu mai expanda variabile.
<br><br> </div>
<div><span class="gmail_quote">On 8/16/07, <b class="gmail_sendername">Andrei Ivanes</b> <<a href="mailto:andrei.ivanes@gmail.com">andrei.ivanes@gmail.com</a>> wrote:</span>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">On 8/16/07, Octavian Purdila <<a href="mailto:tavi@cs.pub.ro">tavi@cs.pub.ro</a>> wrote:<br>> On Wednesday 15 August 2007 10:05, Andrei Ivanes wrote:
<br>><br>><br>> Hint:<br>> 1. [WIN]<br>> - pentru echo 'int main() { return 0;}' parserul o sa iti intoarca un arbore<br>> in care comanda e echo dar ai un singur parametru.<br>> - pentru echo int main() { return 0; } (fara ghililmele) parserul o sa iti
<br>> intoarca un arbore in care comanda e echo si ai 6 parametri.<br>><br>Om observat asta, dar problema este: cum imi dau seama daca are<br>ghilimele sau apostrofi (dispar amandoua). As putea sa ma uit sa vad<br>daca fiecare parametru are spatii si sa ii pun ghilimele sau apostrofi
<br>parametrului, dar care?<br>In bash (cygwin) am vazut ca nu conteaza daca sunt apostrofi sau<br>ghilimele dar pentru cmd.exe conteaza<br><br>In win de exemplu daca ii dau unui program parametrii (in shellul standard):<br>
<br>"%USERPROFILE% blah" '%USRPROFILE% blah' "blah blah" 'blah blah'<br><br>parametrii or sa fie (in imaginea VMware de pe site)<br><br>1: C:\Documents and Settings\so blah<br>2: 'C:\Documents
<br>3: and<br>4: Settings\so<br>5: blah'<br>6: blah blah<br>7: 'blah<br>8: blah'<br><br>dar in shelul bash (cygwin) pentru parametrii:<br><br>"$USERPROFILE blah" '$USERPROFILE blah' "blah blah" 'blah blah'
<br><br>parametrii sunt:<br><br>1: C:\Docuements and Settings\so blah<br>2: $USERPROFILE blah<br>3: blah blah<br>4: blah blah<br><br>Cam irelevant avant in vedere ca corectarea se face in bash (cygwin),<br>dar totusi...<br>
<br>Pana la urma as putea sa ma uit in parametru inainte de expandare<br>(daca este cazul) si sa vad daca are spatii, iar daca are sa ii pun<br>ghilimele. Dar apare o problema: daca parametrul este:<br><br>"$USERPROFILE"
<br><br>cum as putea sa imi dau seama ca trebuie sa ii pun ghilimele?<br><br>> > 2. [WIN]<br>> ><br>><br>> Ce iti trebuie de fapt, este setarea handler-ului ca fiind inheritable.<br>> Problema cu close-ul este cu totul alta. Pentru setarea handler-ului ca
<br>> inheritatble:<br>><br>> 1. Nu trebuie sa faci neaparat un DuplicateHandle, poti folosi<br>> SetHandleInformation.<br>><br>> 2. Poti folosi DuplicateHandle cu acelasi proces sursa/destinatie.<br>>
<br>> [iar pentru problema cu close: create pipe, setezi pipe-ul ca inheritable,<br>> create process, close pipe din procesul parinte - dupa create process]<br>><br>In cele din urma m-am gandit sa fac asa, dar cred ca apare un race
<br>condition, desi foarte putin probabil: daca procesul din capatul de<br>scriere al pipe-ului termina inainte ca shell-ul meu sa dea close la<br>pipe, ReadFile-ul din procesul care capatul de citire din pipe o sa<br>tot astepte date chiar si dupa ce dau close la pipe in shell (asta a
<br>fost problema mea initiala, dar atunci inchideam pipe-ul in procesul<br>parinte dupa terminarea proceselor child).<br><br>> tavi<br>><br><br>--<br>--<br>Multumesc,<br>Andrei Ivanes 342 C1<br>_______________________________________________
<br>so mailing list<br><a href="mailto:so@cursuri.cs.pub.ro">so@cursuri.cs.pub.ro</a><br><a href="http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so">http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so</a><br></blockquote>
</div><br>