Vždyť to je ukázka přesně toho, před čím se varovalo v diskuzích o Monu i tady na Rootu. C# přitahuje jedince, kteří neumí pořádně programovat, protože řadu věcí hlídá za ně. Takže se objevuje spousta SW, který je naprosto prasácky či neefektivně napsán, protože udělat ho je celkem jednoduché. Jako svého času naklikávači komponent dělali zpraseniny ve Visual Basicu. Samozřejmě, že skript v Bashi je elegantnější i vhodnější řešení. Ale to by člověk musel Bash ovládat.
z toho že to někdo napsal v C# mi připadá, že to asi byl nějaký Wokeník; pro cmd se nedají napsat tak „složité“ skripty, tak muselo být sáhnuto po něčem jiném – to že byl vybrán C# znamená, že to bylo v rukou nějakého naklikávače…
programátor pod linuxem by samozřejmě použil bash, protože to je pro takovéto věci přímo určené.
Presne pre toto nemam rad C# a nie som zastancom rozsirovania Linux-u a Unix-u beznemu ludu. Nech sa na mna nikto nehneva:
!/bin/bash find . -name .emptydirs -delete find . -type d -empty -exec bash -c "echo 'empty' > {}/.emptydirs" \;
Koli tomuto robit tool a este v C#?
A este napomahat rozsirovaniu?
Vsak sa dajte liecit.
$ mkdir "A B" $ find . -type d -empty -exec bash -c "echo 'empty' > {}/.emptydirs" \; $ cat A empty B/.emptydirs $ ls -l "A B" $
Tak teda nevím… Než dělat takovýhle chyby, který se odhalí jenom náhodou a do té doby způsobí kdovíkolik ztrát, tak to raději použít něco jinýho, než bash – i když s tím Cis bych taky váhal :) a raději šáhl po Pythonu…
>> Pokud nekdo napise strom kodu s mezerama v nazvech, povesil bych ho do pruvanu ze nejakou citlivou cast tela.
Ja taky. Ale to neznamena, ze budu predpokladat, ze tam nejsou, a budu v klidu.
Proste bash se mi kvuli tomuhle nelibi – musim porad premyslet nad tim, co je v kolika vnorenych uvozovkach, co se kde expanduje a co ne atd. Proto radeji pouzivam Python. Uznavam, ze me to diskvalifikuje ze zavodu o nalepku „unixovy guru“, ale to me trapi min nez snaha psat skripty, ktere funguji :)
Ak vas trapia medzery je na to jednoduche riesenie. Skuste si pozriet „find -print0“ a „xargs –0“. Tato kombinacia funguje vyborne. Koli tomuto cvicnemu prikladu sa mi s tym ale nechcelo vobec zabavat. Len som chcel ukazat ze pisat akykolvek program ktory je nahraditelny dvomi jednoduchymi shell prikazmi je pekna blbost. Na asi dalsich 10 riadkov to urobim ako plnohodnotnu nahradu za ten povodny program aj s parsovanim parametrov.
To este nevieme ci to ma napisane korektne. Museli by sme skusit. Garantujem vam ze cim vacsi pocet riadkov kodu tym viac chyb. Pre vypecencov tu je dalsi fix snad posledny:
find . -type d -empty | sed 's/\\/\\\\/g' | sed 's/"/\\"/g' | while read a; do echo "empty" > "$a/.empty"; done
Teraz najdi frajer :P.
Ted uz me nic nenapada ;)
P.S. v praxi by asi stacilo find -X
Nicmene to byla krasna ilustrace toho, jak je programovani v bashi vopruz, protoze cloveku malem praskne hlava nad tim, jak to napsat bez chyb…
…a kdyz si predstavim, ze bych tohle cely chtel dat jeste do jednech uvozovek (treba spoustet pres ssh), tak… …bych se na to radeji vykaslal :)
Ja som si vyrobil adresar x\' "; rm a a to spatne lomitko je v nazve suboru nie ako escape a funguje to OK takze je to asi OK. Nevyhodou takeho programceku v MONO je cez SSH ho nespustite na vzdialenom stroji vobec. Tento skriptik tam prenesiete aj cez copy/paste.
V kazdom pripade ale pristup ze tento SW nerobi to co ja chcem alebo ma chybu tak si napisem nieco vlastne je chory.