slacker_nl | maandag 14 januari 2008 @ 11:22 | |||||||||
Welkom in het centrale shell scripting topic. Als je vragen hebt over shell scripting, dan zit je hier goed. Hier zitten idioten die verstand denken te hebben van shell scripting en je helpen om leuke nifty scriptjes te maken in de unix shell. Mocht je een probleem hebben met je code, post deze dan even. We kunnen anders niet zien wat je precies aan het doen bent. Nieuw met shell scripting? Voor mensen die nieuw zijn in shell scripting, die raad ik aan om de introductie te lezen en de bash tutorial eens door te lezen. Als je wilt beginnen maakt het eigenlijk niet uit welke shell je wilt gebruiken, bash, zsh, ksh, csh, etc, etc, ze doen allemaal hetzelfde namelijk, je interface op de commandline zijn. Als je begint is het handig om bash te leren, aangezien het zeer goede documentatie heeft. Maar de andere shells worden ook actief gebruikt. In het kort, pick any, en maak daarna de eventuele overstap naar een andere shell (altijd leuk om een andere shell te leren ![]() * Shell HOWTO in het Nederlands * Een intro in shell scripting (bash) Het portable maken van scripts Als je een script portable maakt moet je rekening houden dat je niet altijd overal de GNU versies van verschillende applicaties hebt, dat betekend dus dat je bijvoorbeeld `sed -i' niet kan uitvoeren, en dus een andere manier hiervoor moet vinden. Ook kan het inhouden dat je code onder andere shell talen komt te draaien. Houd hier rekening mee in je code. Op Solaris bijvoorbeeld kan je in een script die /bin/sh aanroept geen bash specifieke functies aanroepen, of syntax gebruiken. Solaris gebruikt in tegenstelling tot Linux de echte born shell. Over Solaris gesproken (en andere distro's), implementaties van sommige functies heten anders (truss en strace, tcpdump en snoop bijvoorbeeld) of hebben een andere parameters. Maar voor vragen daarover kan je in [Linux/Unix] [/Gurus/helpen/newbies]$ ./deel zoveel topic terecht (de link wijst overigens naar de wiki, daar staat namelijk de correcte URL naar het laatste topic). Welke shell gebruik ik nou? Welke shell je gebruikt staat in het /etc/passwd bestand. Er is een omgevings variabele SHELL die aangeeft welke shell in het wachtwoordbestand staat. Om deze variabele op te vragen moet je hetvolgende doen.
Dit is echter geen garantie dat je ook daadwerkelijk de shell draait waar je op dat moment mee werkt. Kijk maar:
Om er dan achter te komen welke shell je echt draait, kan je dit uitvoeren:
Tips and tricks Ergens verstopt (lees, op dit moment nog nergens te vinden) in wiki staat er een handige pagina met shell functies die jou kunnen helpen. Deze zijn afkomstig uit o.a. Het linux n00bs en guru's topic, of komen uit deze topicreeks. Meer over de shell(s) * GNU bash * Zeer uitgebreide bash tutorial, ook handig als referentiemateriaal * Bash reference manual * Bourne/Korn Shell coding conventies (OpenSolaris) * Zsh user guide * Alleen maar shell scripting.. (forum) Mocht je meer vragen hebben over shell scripting, op eu.freenode.org heb je verschillende kanalen, waaronder #bash. #zsh en andere #shells zullen ook wel bestaan. Deze OP en instructies voor nieuw topic: http://wiki.fok.nl/index.php/OP/DIG/centraal/bash Mocht je een link vinden die zeker in de OP hoort, twijfel niet en zet hem erbij! Big fucking warning Ga nooit "leuk" zijn en mensen vertellen dat ze rm -rf /, moeten uitvoeren, dit wordt ZWAAR bestraft door de mods @hier en terecht. Voor de mensen die niet precies weten wat dit doet: rm -rf is een recursive, geforcede delete (rm == remove) actie op de root van je systeem. Mocht je als root zijn ingelogd dan verwijder je alle bestanden van je systeem en zal je snel merken dat je PC niet meer boot en je al je data kwijt bent. Mocht je een gewone user zijn en dit uitvoeren, dan heb je grote kans dat je homedir pleitte is, en andere bestanden buiten je $HOME, waar jij de eigenaar voor bent en/of group schrijfrechten voor hebt. Voer dit daarom dan ook NOOIT uit (tenzij je pijn leuk vind of als je in een virtuele omgeving zit waar dataverlies niet uitmaakt). Als we een post vinden waarin we dit zien, kijk er dan niet raar vanop dat je niet meer kan posten in DIG, of op heel Fok for that matter. U bent gewaarschuwd! [ Bericht 8% gewijzigd door slacker_nl op 14-01-2008 18:04:05 ] | ||||||||||
whoops | maandag 14 januari 2008 @ 11:48 | |||||||||
![]() ![]() | ||||||||||
Daniel1976 | maandag 14 januari 2008 @ 12:11 | |||||||||
-edit- [ Bericht 83% gewijzigd door Sander op 14-01-2008 12:52:19 ] | ||||||||||
Daniel1976 | maandag 14 januari 2008 @ 12:12 | |||||||||
-- [ Bericht 93% gewijzigd door Sander op 14-01-2008 16:06:55 ] | ||||||||||
Sander | maandag 14 januari 2008 @ 12:14 | |||||||||
Dat kan je je postrechten kosten Daniel. Zeg maar voor altijd. | ||||||||||
whoops | maandag 14 januari 2008 @ 12:51 | |||||||||
quote:apt-get install humor? | ||||||||||
AlphaOmega | maandag 14 januari 2008 @ 12:53 | |||||||||
quote:Daarbij zijn dat commando's die zo ontzettend zielig zijn om te roepen in dit soort topics. Interessant topic, deze reactie tevens als TVP. | ||||||||||
slacker_nl | maandag 14 januari 2008 @ 12:54 | |||||||||
quote:nee, dit kost je postrechten: DUS NIET UITVOEREN APEN!! [ Bericht 1% gewijzigd door Sander op 14-01-2008 13:14:04 (niet doen) ] | ||||||||||
WyriHaximus | maandag 14 januari 2008 @ 15:06 | |||||||||
Zo ook maar ff een TVPtje maken ![]() | ||||||||||
slacker_nl | maandag 14 januari 2008 @ 15:46 | |||||||||
quote:mietje slar ![]() | ||||||||||
tony_clifton- | woensdag 16 januari 2008 @ 13:52 | |||||||||
quote:Wat doet 't ofzo? Ik ken niks van code dus zou wel graag weten wat 't is voor ik 't eens uitprobeer ![]() | ||||||||||
whoops | woensdag 16 januari 2008 @ 13:57 | |||||||||
quote:Deze code print de letters TVP op je console. ![]() Om dit de draaien moet je die code in een bestand opslaan (bijvoorbeeld filename.sh), dan met de terminal naar de directory waar het in staat en dan 'chmod +x filename.sh', en uitvoeren door ./filename.sh uit te voeren. | ||||||||||
tony_clifton- | woensdag 16 januari 2008 @ 14:17 | |||||||||
Ah k ![]() ingewikkeld! | ||||||||||
slacker_nl | woensdag 16 januari 2008 @ 16:06 | |||||||||
quote:Niet perse natuurlijk, deze code kan je ook gewoon in terminal inkloppen en dan moet het ook werken. Maar in een file is het idd makkelijker, vooral als je moet gaan editten :) Doe dit maar eens in een terminal: enter() { echo "Enter the shell" } en dan `which enter'
| ||||||||||
whoops | donderdag 17 januari 2008 @ 12:48 | |||||||||
quote:De makkelijkste manier om dit te doen is overigens zo: echo TVP maar ik vond het leuk om een array met letters te maken, en deze 1 voor 1 uit te spugen. ![]() | ||||||||||
tactic_to | zaterdag 19 januari 2008 @ 00:23 | |||||||||
even een tvp want dit is verdomdig handig. | ||||||||||
slacker_nl | woensdag 13 februari 2008 @ 15:41 | |||||||||
Een todo manager volledig in bash geschreven. Zie filmpje op de site voor de werking ervan. Het script zelf zit vol met sed commando's. Dus als je wilt debuggen, enjoy ![]() http://todotxt.com/library/todo.sh/ | ||||||||||
whoops | woensdag 18 juni 2008 @ 22:48 | |||||||||
Bashers! ![]() Ik heb het volgende stuk code:
Deze code print een lijst met keuzes d.m.v. Dialog. Dit werkt prima zo. Ik zou echter graag de opties variabel willen maken, en dit lukt me niet. Ik heb al geprobeerd om de opties in een variabele te zetten, en deze als parameter van het dialog commando mee te geven, maar dat levert niet het gewenste resultaat op... ![]() Anyone any clues? | ||||||||||
slacker_nl | donderdag 19 juni 2008 @ 01:21 | |||||||||
Ff dit aanpassen in je voorbeeld, anders kan ik die checklist dialog niet maken..
| ||||||||||
slacker_nl | donderdag 19 juni 2008 @ 01:41 | |||||||||
Gebruik van arrays :)
| ||||||||||
whoops | donderdag 19 juni 2008 @ 09:58 | |||||||||
Thanks dude, hier kan ik zeker wel wat mee... ![]() | ||||||||||
whoops | dinsdag 24 juni 2008 @ 18:45 | |||||||||
Ik heb 2 vragen. 1: is er een makkelijkere manier om $i met 1 op te hogen?
2: In onderstaande code wil ik een dot-file uit m'n homedir inlezen, ik kan deze waarde echter niet variabel maken. Hoe krijg ik dat voor elkaar?
| ||||||||||
slacker_nl | dinsdag 24 juni 2008 @ 19:24 | |||||||||
quote:Je haalt nu twee dingen door elkaar; i=`expr $i + 1` en i=$((i + 1)) Die echo is niet noodzakelijk in beide gevallen. quote:
B pakt ie niet, maar dat komt wellicht omdat ie tijdens de test geen ~ expand naar je homedir, makkelijke workaround is $HOME gebruiken.. Zoals dus bij A gebeurd. | ||||||||||
Iblis | dinsdag 24 juni 2008 @ 19:44 | |||||||||
quote:Dit is overigens heel erg niet-portable naar ‘sh’ op deze manier. Als je een shell-script moet maken dat onder sh werkt, kun je dit niet gebruiken (daar heb je andere trucs voor, met eval, maar daar begin ik liever niet over.) | ||||||||||
slacker_nl | dinsdag 24 juni 2008 @ 19:47 | |||||||||
quote:Nu weet ik dat whoops 99,9% bash code schrijft, en ik weet ook dat ie in 99,99% geen sh compatible code nodig heeft ![]() Maar hoe zou je dit, voor de lol, in sh compatibel code willen doen dan? [ Bericht 5% gewijzigd door slacker_nl op 24-06-2008 19:56:14 ] | ||||||||||
whoops | dinsdag 24 juni 2008 @ 20:31 | |||||||||
quote: quote:Dit waren degene die ik zocht, thanks slack... ![]() | ||||||||||
Iblis | dinsdag 24 juni 2008 @ 20:47 | |||||||||
quote:Je moet dan ‘eval’ gebruiken. eval is een built-in commando dat de argumenten evalueert als waren ze een string in een shell-script. B.v.
De eerste twee regels zijn duidelijk, de derde werkt als volgt: eerst worden de argumenten van het commando ‘eval’ geëvalueerd, dus dat wordt in feite:
En dan wordt ‘echo $bar’ geëvalueerd, wat ‘baz’ levert. Zo gaat het ook met je arrays:
Dit kan heel traag worden als je b.v. meerdere indices gebruikt, het eval-commando is namelijk vrij traag. | ||||||||||
whoops | dinsdag 24 juni 2008 @ 22:46 | |||||||||
quote:Het gebruiken van eval doet slacker ook al in zijn antwoord op mijn vraag hierboven... ![]() Vanuit php heb ik trouwens altijd geleerd eval==evil en op zich denk ik dat ook wel... Toch gebruik ik het om mijn array mooi in dialog te krijgen. Als jij daar nog een manier zonder eval voor weet hou ik me aanbevolen... ![]() De scripts die ik schrijf mogen inderdaad wel puur bash zijn, over het algemeen bouw ik ze voor een eigen gebruik, hoewel het het mooiste is om standaard te zijn... ![]() | ||||||||||
slakkie | woensdag 25 juni 2008 @ 01:24 | |||||||||
quote:Ik had al het vermoeden dat je deze methode zou gaan gebruiken. Heb hem ook overwogen in eerste instantie, maar vond de array feature veel handiger ![]() Maar we zijn stom bezig.... Terwijl ik bezig was om te kijken welke manier nou sneller was kwam ik op de uiteindelijke oplossing. Een soort van array push simuleren in bash. sh is twijfelachtig, $((i + i)) wordt volgens mij niet ondersteund.
test_bash real 0m0.005s user 0m0.004s sys 0m0.000s test_sh real 0m0.048s (schommelt tussen .024 - .050 bij herhaaldelijk aanroepen) user 0m0.008s sys 0m0.020s test_choice real 0m0.006s user 0m0.008s sys 0m0.000s test_choice - met expr (schommelt tussen .045 - .070) real 0m0.044s user 0m0.036s sys 0m0.008s test_choice - sh compat real 0m0.028s (schommelt tussen .014 - .030) user 0m0.012s sys 0m0.004s De code | ||||||||||
Jo0Lz | donderdag 28 augustus 2008 @ 11:37 | |||||||||
Centraal. | ||||||||||
RemcoDelft | donderdag 28 augustus 2008 @ 13:22 | |||||||||
quote:Goeie zaak, want ik had dit topic nog niet eerder opgemerkt! quote:Het kan ook erger (spreek ik uit ervaring... 8)7 8)7 ):
Ooit wou ik alle files en directories die met een PUNT beginnen in /tmp opruimen (dit zijn de directories die o.a. X achterlaat). Echter, hierbij zag ik over het hoofd dat ".." op deze manier ook wordt meegenomen, en vanaf /tmp is ".." gelijk aan / ... Na enkele seconden viel het kwartje, omdat de delete-actie wel erg lang duurde, en heb ik CTRL-C gedaan. M'n userdata was nog veilig, maar m'n OS kon ik opnieuw installeren (en nee, m'n OS backup ik niet). Ondertussen is "rm .*" zo slim om te zeggen dat-ie . en .. negeert :) Moraal van het verhaal: Unix/Linux doet precies wat je zegt, maar pas altijd op wat je zegt :D | ||||||||||
Iblis | donderdag 28 augustus 2008 @ 13:39 | |||||||||
quote:rm zelf doet niets met ‘.*’, het is de shell die zo’n pattern matcht en vervang door een lijst van bestanden die eraan voldoen. De Kornshell laat . en .. niet matchen op .*, bash echter soms wel, afhankelijk van de waarde van $GLOBIGNORE. Als je rm -rf .. intypt zal het nog steeds misgaan. Bij zulke zaken is het dus goed om uit te zoeken wat de precieze semantiek van je shell is! | ||||||||||
GBCHEATER | dinsdag 23 september 2008 @ 00:29 | |||||||||
Ik ben inmiddels weer vrolijk aan het bashen geslagen, ik zoek een manier om te kijken of ik in een string evenveel { en }; heb. Nu dacht ik, als ik nou de regex gebruik die ingebouwd zit in bash.
echter komt hier altijd 1 uit. Toen ben ik verder gaan zoeken, en toen had ik zoiets als dit
Dit werkt voor het { gedeelte van de twee. Voor de }; echter niet, ik denk dat dit komt omdat tr een match heeft per character in plaats van een tekenreeks. Enig idee hoe ik of het }; gedeelte kan uitvissen, of hoe ik dit anders aan zou moeten pakken? | ||||||||||
whoops | dinsdag 23 september 2008 @ 10:07 | |||||||||
Volgens mij werkt je methode met tr en wc wel hoor.
Ik zou overigens niet weten of het efficienter kan. | ||||||||||
GBCHEATER | dinsdag 23 september 2008 @ 13:13 | |||||||||
quote:Klopt, echter is de sluit "tag" }; dus inclusief de ; Als de ; op een volgende regel staat, moet deze meegenomen worden. Dus moet eerst de volgende regel ingelezen worden, waarna hij pas compleet is. Dus hij moet echt gematcht worden op "};" ![]() | ||||||||||
Iblis | donderdag 25 september 2008 @ 08:23 | |||||||||
In principe kun je met regexpen niet wat je hiermee wilt. Een regexp kan niet echt ‘tellen’ en niet kijken of haakjes gebalanceerd zijn. Je kunt het proberen, maar als je de string '{a{b}c{d}e}' hebt dan zal een regexp voor '{.*}' matchen op de gehele string als deze greedy is, of op '{a{b}' als deze lazy is. In het eerste geval zou je weer kunnen substring matchen, maar dan heb je eenzelfde probleem, omdat dan de match {b}c{d} wordt. (En een substring match op b}c{d niet gaat werken.) Met veel kunst en vliegwerk is hier wel omheen te werken. De oplossing met ‘tr’ heeft een beetje een probleem dat het foute input als '}}{{' er niet uit kan halen. Ik weet niet of je dat wilt, maar anders is dit een probleem. Het makkelijkste is, als je het echt foutloos wilt doen, een klein perl of awk scriptje te schrijven dat de input simpelweg karakter voor karakter langsgaat en bij elke { de teller ophoogt, en bij elke } verlaagt. Als je teller < 0 komt, heb je te veel }, is deze > 0 bij het eind van de input heb je te veel { en is deze 0, dan zijn ze in balans. Verder kun je dus, als deze 0 is, de input afscannen naar ';'. Weet je zeker dat de haakjes wel in balans zijn, dan zou je het volgende kunnen proberen:
Eerst haal ik dus alle zooi uit de string behalve {, } en ; – ook de '\n's zijn dan weg. Dan tel ik linker en rechter haakjes (aannemende dat ze al in balans zijn). En dan moet de string met '};' eindigen. | ||||||||||
GBCHEATER | donderdag 25 september 2008 @ 13:57 | |||||||||
Hier ga ik morgen even mee aan de slag, even rondspelen met verschillende input combinaties, misschien werkt het, maar waarschijnlijk zit er nog een mogelijkheid in dat een blok (dus wat tussen de { en de }; zit) niet afgesloten kan zijn geweest. Maar opzich maakt dat niet heel erg veel uit, aangezien BIND zelf dan gaat lopen mekkeren dat de syntax niet goed is. Bedankt voor de mogelijke oplossing. Ik ben benieuwd ![]() p.s. PERL is geen optie, omdat dit niet aanwezig is op het systeem (en niet geinstalleerd mag/kan worden) | ||||||||||
Iblis | donderdag 25 september 2008 @ 16:40 | |||||||||
Met AWK kun je nagenoeg hetzelfde als met Perl, zij het vaak iets minder beknopt. Zie onderstaande code. BEGIN wordt uitgevoerd voordat de input wordt gelezen, END altijd nadat alle input is gelezen, en het blok ertussen voor elke regel. Hij scant dus elke regel karakter voor karakter op '}', als de haakjes uit balans zijn komt er een error. Na de laatste } moet een ';' komen. Er is één catch, de input die alleen uit ';' bestaat wordt óók goedgekeurd. Daar kun je misschien expliciet op checken. Je runt het met awk -f 'bestand' en kunt er dan gewoon via stdin input instoppen.
| ||||||||||
GBCHEATER | zondag 28 september 2008 @ 21:52 | |||||||||
quote:Bedankt voor de reactie, Ik probeer de Named.Conf.Local te parsen van BIND. Hierbij is het nodig dat ik fouten probeer te voorkomen waar dit mogelijk is. Voorbeeld van invoer:
Ik zoek het eerste gedeelte op met een regular expression, waardoor ik weet waar ik moet beginnen. Daarna (is de bedoeling) dat ik bekijk dat ik na een { ook een bijbehorende }; heb. Wanneer dit zo is, weet ik dat ik de volledige zone heb. Wanneer dit niet zo is, lees ik de volgende regel in (verwijder ik whitespaces en comments), en bekijk ik verder of ik alles heb. Hierdoor is het dus ook zo dat de ; 2 regels later kan komen. Op dit moment heb ik (ongeveer) hetzelfde gedaan wat jij doet in die paar regels met awk, alleen dan ook met (basic) syntax checking. Ik moet alleen nog bekijken hoe ik een newline kan matchen met een regular expression, aangezien na een } wel een spatie en een newline kan komen, maar geen ander teken moet ik hier rekening mee houden. Wanneer de zone file naar de bagger is, moet het script stoppen en het niet erger maken :) Ik zie dat je met awk redelijk veel kan doen, wist niet dat er zo een uitgebreide scripttaal achter zat.. | ||||||||||
Iblis | zondag 28 september 2008 @ 21:58 | |||||||||
Newlines in reguliere expressies matchen is meestal gewoon ‘\n’, maar veel tools scheiden impliciet op ‘\n’, zodat er dus nooit een ‘\n’ in je string komt. Als je dit weet echter kun je toch simpelweg (in termen van AWK) records inlezen, wat in de praktijk op regels neerkomt, en kijken of die records alleen spaties bevatten. Die records c.q. regels zelf moeten dan wel door ‘\n’ gescheiden zijn. | ||||||||||
GBCHEATER | maandag 29 september 2008 @ 04:53 | |||||||||
quote:Op dit moment ben ik niet zeker of het de newline character is wat zo loopt te klieren. Wanneer ik het wil echoen op het scherm, krijg ik gewoon een spatie, maar hij word niet gematcht door de \s teken. Ik zal wat meer debuggen en dan kom ik hier op terug. Bedankt voor het meedenken iedereen ![]() | ||||||||||
slacker_nl | dinsdag 23 december 2008 @ 14:22 | |||||||||
Weet iemand hoe het komt dat bash hetvolgende doet;
Zsh doet dit, en dit is wat ik wil:
-edit- echo "$bla" is de oplossing... Zie http://wooledge.org:8000/WordSplitting [ Bericht 5% gewijzigd door slacker_nl op 23-12-2008 14:33:24 ] | ||||||||||
RemcoDelft | dinsdag 23 december 2008 @ 14:38 | |||||||||
Waarom find . -print? Doet dat niet hetzelfde als gewoon "find"? Ik gebruik altijd zoiets, veel inzichtelijker: for i in `find`; do echo $i; done | ||||||||||
slacker_nl | dinsdag 23 december 2008 @ 14:41 | |||||||||
quote:Kan ook zonder de -print. Gebruik ze beide. Maar ik hoef niet over find te loopen. Uit de man page van find: quote:En als niet perse sh compatible code hoeft te schrijven $() is veel sneller dan backticks. for i in $(find . ) ; do echo $i ; done | ||||||||||
Iblis | dinsdag 23 december 2008 @ 17:38 | |||||||||
$() is ook gewoon POSIX. Je hebt dus sowieso een niet-POSIX shell te pakken als $() het niet doet. De vraag is in hoeverre je daar tegenwoordig nog rekening mee wilt houden. | ||||||||||
slacker_nl | woensdag 24 december 2008 @ 13:31 | |||||||||
Op solaris 8: cat x.sh #!/bin/sh echo $(ls) chmod +x x.sh ./x.sh ./x.sh: syntax error at line 3: `(' unexpected | ||||||||||
slacker_nl | donderdag 10 september 2009 @ 14:20 | |||||||||
Waarom print ie niet m'n totalen uit?? Als ik
naar
Werkt het wel... Why?? | ||||||||||
Iblis | donderdag 10 september 2009 @ 15:40 | |||||||||
http://mywiki.wooledge.org/BashFAQ/024 ![]() | ||||||||||
whoops | donderdag 10 september 2009 @ 15:45 | |||||||||
quote:Gebruik dan ook geen bash maar zsh ofzo... ![]() | ||||||||||
slacker_nl | donderdag 10 september 2009 @ 16:05 | |||||||||
@whoops Spuit 11 ![]() @Iblis Hehehe, held ![]() | ||||||||||
ReWout | donderdag 10 september 2009 @ 21:19 | |||||||||
Is dit ook 't topic om te leren hoe je files verplaatst van map x naar map y en programma's opent via shell enzo? ![]() | ||||||||||
Iblis | donderdag 10 september 2009 @ 21:23 | |||||||||
quote:Het is meer voor wat complexere scripts zou ik zeggen, er is ook [Linux/Unix] [/Gurus/helpen/newbies]$ ./deel 26 , maar goed, ik wil je wel helpen hoor als je hier je vraag stelt. Die andere topic gaat altijd over Gnome en KDE en zo. ![]() | ||||||||||
xeonnn | maandag 18 januari 2010 @ 18:55 | |||||||||
hoe laat je kleuren zien in de shell dan ? | ||||||||||
Iblis | maandag 18 januari 2010 @ 19:24 | |||||||||
Zoek op bash colors. Je hebt b.v. hier een overzicht: http://wiki.archlinux.org/index.php/Color_Bash_Prompt Je krijgt rode tekst door zoiets in te typen:
Let wel op, daarna blijft alles rood. ![]() | ||||||||||
slacker_nl | dinsdag 2 februari 2010 @ 15:29 | |||||||||
Denk dat iblis deze gaat beantwoorden ![]()
Hoe krijg ik net zo'n mooie oplossing met sed als ik heb in perl? While I was typing:
Toch jammer dat sed niet de \S kent zoals perl ![]() | ||||||||||
Iblis | dinsdag 2 februari 2010 @ 15:42 | |||||||||
Je zegt het zelf al, maar daarbij: Je kunt eventueel ook [^ <TAB>] doen, waarbij je voor <TAB> letterlijk een tab in je editor typt… maar dat is niet zo duidelijk. Die Perl-classes zoals \S en \s zijn echter geen POSIX, allicht dat sommige seds ze wel snappen, maar heel portable zal het niet zijn. Een letterlijke [^ <TAB>] is denk ik nog het meest portable. Als je zeker weet dat er geen <TAB> wordt gebruikt voldoet [^ ] ook natuurlijk. | ||||||||||
Daniel1976 | dinsdag 2 februari 2010 @ 15:47 | |||||||||
Ik kan nog steeds posten hier. Helaas weet ik niet meer wat ik hier boven had getikt wel jammer. het zal wel een rm -Rf gewest zijn ![]() Dan moet je de man pages maar doorlezen. | ||||||||||
SinofEnvy | maandag 1 maart 2010 @ 18:46 | |||||||||
Hoe kan ik nou makkelijk een commando uitvoeren op een serie bestanden met nummers? Bijv ik heb File0001.jpg, File0002.jpg, File0003.jpg, etc en ik wil op ze allemaal touch uitvoeren. Het zal wel met een for-loop gaan ofzo, maar ik ben geen ster in bash scripting (ik kan met een shell overweg maar heb me nog nooit gewaagd aan shell scripts eigenlijk) dus als iemand dit me zou kunnen vertellen zou dat heel mooi zijn. ![]() | ||||||||||
Iblis | maandag 1 maart 2010 @ 18:55 | |||||||||
Nu wil het toeval dat touch op meerdere files werkt, dus dan kun je simpelweg touch File*.jpg doen bijvoorbeeld. In het geval dat je iets wilt doen wat maar met één file tegelijk kan, b.v. resizen, dan doe je het inderdaad met een for-loop. Die ziet er zo uit:
* wordt simpelweg geëxpandeerd tot een lijst van bestanden (zoals de shell altijd doet), en vervolgens wordt voor elk element in die lijst de code tussen do en done uitgevoerd waarbij $i de waarde heeft van dat element. (Je kunt natuurlijk ook for j in *; of for bestand in *; doen, en verandert je variabele ook in b.v. $bestand.) Er is een aantal zaken waar je op moet letten, in het bijzonder wanneer de bestanden spaties bevatten. Wat dat betreft is het beter om in de loop "$i" te typen. In jouw geval zou je het zo kunnen oplossen:
Hier een voorbeeld om b.v. thumbnails te maken:
Dan krijg je een hele rits nieuwe bestanden genaamd th_File0000.jpg, th_File0001.jpg, enz. Je kunt natuurlijk altijd experimenteren met 'echo' om te zien wat het commando uiteindelijk wordt, b.v.:
En je kunt in de shell ook de boel op 1 regel typen als je wilt:
| ||||||||||
SinofEnvy | maandag 1 maart 2010 @ 20:35 | |||||||||
Super, thanks! Ik neem aan dat in je eerste voorbeeld je for i in * bedoelt? Er staat namelijk for i in alleen. ![]() | ||||||||||
Iblis | maandag 1 maart 2010 @ 20:39 | |||||||||
quote:Oh ja. Foutje. Foutje van FOK! zelfs, er staat wel *; in de source, maar dat verdwijnt in een code omgeving. | ||||||||||
-Mzraki- | donderdag 4 maart 2010 @ 00:16 | |||||||||
Ik weet niet of ik met deze vraag helemaal bij het goede adres ben, maar het komt wel in de buurt volgens mij ![]() Ik heb in C een programma geschreven dat een model simuleert (Ising model, rooster met punten die +1 of -1 kunnen zijn), en dat werkt. Nu laat ik mijn programma het uiteindelijk gecreerde rooster gewoon printen met printf. Om de evolutie van dit rooster echter goed te kunnen bekijken voldoet dit niet echt, het rooster staat zo namelijk niet vast in de terminal, hij scrollt naar boven. Het liefste zou ik mijn programma een apart scherm laten openen waar ik het rooster telkens opnieuw in kan printen, zodat als ik mijn simulatie laat lopen ik makkelijk kan zien hoe het zich ontwikkeld. In IDL zou ik dit wel kunnen, maar ik kan nergens vinden hoe ik zoiets in C kan programmeren. Misschien is daar ook wel een commando voor in de terminal, net zoals dat ' > output.dat ' alle output naar dat bestandje wegschrijft. Weten jullie of zoiets bestaat? Bij voorbaat dank in ieder geval! | ||||||||||
Iblis | donderdag 4 maart 2010 @ 00:23 | |||||||||
In principe is de terminal alleen iets waarop na elkaar geprint wordt. Je zult een soort clrscr-routine moeten zoeken m.b.v. een library zoals ncurses. | ||||||||||
-Mzraki- | donderdag 4 maart 2010 @ 00:30 | |||||||||
Ja, iedere keer na een print het scherm clearen zou idd een idee zijn, maar hoe dat met die library te doen zie ik zo snel niet. Ik vraag het morgen wel even bij college, bedankt voor je antwoord in ieder geval! | ||||||||||
Iblis | donderdag 4 maart 2010 @ 00:43 | |||||||||
quote:Wat ook kan, want meestal blijft de terminal onderaan staan, is het rooster printen, en dan even wachten, en de volgende iteratie printen (moet het rooster wel telkens even groot zijn). Dus zeg:
| ||||||||||
-Mzraki- | donderdag 4 maart 2010 @ 00:52 | |||||||||
Ohja, das in ieder geval wel een makkelijke methode om het snel wat beter te maken, thx ![]() | ||||||||||
Dale. | zaterdag 18 december 2010 @ 21:38 | |||||||||
Vraagje Iemand enig idee hoe ik via shell het aantal bestanden tel wat zich in een ftp map bevindt (ben dus met ftp verbonden)? | ||||||||||
RemcoDelft | zaterdag 18 december 2010 @ 21:44 | |||||||||
Zelfs als je een getal terugkrijgt: wat wil je dat je ftp-client daarmee doet? Heb je geen ssh-toegang, dat maakt het eenvoudiger. | ||||||||||
Dale. | zaterdag 18 december 2010 @ 21:51 | |||||||||
Bestanden hernoemen, ssh toegang heb ik geloof ik wel (weet alleen niet hoe ik dat opzet, even uitzoeken) Bestand01.jpg Bestand02.jpg ... Bestand**.jpg Hernoemen naar BestandWiii01.jpg BestandWiii02.jpg ... BestandWiii**.jpg | ||||||||||
slacker_nl | zondag 19 december 2010 @ 03:37 | |||||||||
Als je tevreden bent, -n weghalen en done ![]() Je kan het ook met een for-loop doen, maar rename commando is handy ![]() | ||||||||||
Dale. | zondag 19 december 2010 @ 14:27 | |||||||||
Ty ![]() Ander vraagje hoe upload ik een hele directoy naar ftp? Kan alleen bestanden verplaatsen maar geen dirs..? | ||||||||||
PiRANiA | zondag 19 december 2010 @ 14:32 | |||||||||
Google even op lftp (mirror) | ||||||||||
Dale. | zondag 19 december 2010 @ 14:56 | |||||||||
Ty ![]()
Kun je de regel uitleggen? Waarvoor staat die -n s/ $1 en $2 enzo ![]() Weet dat -n flag is (weet niet echter wat die doet \d+ is decimaal of meer * is wildcard. Oh wacht gewoon regex toch? | ||||||||||
slacker_nl | zondag 19 december 2010 @ 15:33 | |||||||||
Het is gewoon een perl regexp ja, die -n is dat ie laat zien wat ie zou doen, zonder het daadwerkelijk te doen. | ||||||||||
RemcoDelft | zondag 19 december 2010 @ 15:48 | |||||||||
Mijn persoonlijke voorkeur is tegenwoordig scp (ssh-toegang vereist): scp -r /home/user/directory username@example.com:/home/andereusername/subdirectory # ![]() | ||||||||||
Dale. | zondag 19 december 2010 @ 16:47 | |||||||||
Hmmm die -n flag doet het volgens mij niet bij me ![]()
| ||||||||||
slacker_nl | zondag 19 december 2010 @ 17:40 | |||||||||
dat werkt niet met ftp nee, ssh toegang is wel een vereiste ![]() | ||||||||||
Dale. | zondag 19 december 2010 @ 18:58 | |||||||||
ok en hoe krijg ik dat? Vind alleen maar lange manuals ![]() | ||||||||||
Joooo-pi | zondag 19 december 2010 @ 19:18 | |||||||||
Als je server ssh draait, dan vanuit windows met putty of vanuit linux gewoon vanuit de terminal: $ ssh inlognaam@ip-van-server | ||||||||||
Dale. | zondag 19 december 2010 @ 21:21 | |||||||||
Ah thanks dat is eenvoudig. | ||||||||||
Dale. | maandag 27 december 2010 @ 22:46 | |||||||||
Vraagje... hoe verplaats ik "Home Alone.mkv.part01.rar" naar "Home Alone/Home Alone.mkv.part01.rar" ps. wanneer ik met ssh ingelogd ben bestaat de commando rename trouwens niet eens... en mv kent de optie -n niet. | ||||||||||
slacker_nl | maandag 27 december 2010 @ 23:10 | |||||||||
mkdir "Home Alone" ; mv "Home Alone.mkv.part01.rar" "Home Alone/Home Alone.mkv.part01.rar" Kan te maken hebben met je PATH, maar zou ook kunnen zijn dat het niet installed is. | ||||||||||
Dale. | maandag 27 december 2010 @ 23:22 | |||||||||
ah ja sorry maar bedoel natuurlijk alle parts iets van 50 ofzo ![]() | ||||||||||
PiRANiA | maandag 27 december 2010 @ 23:23 | |||||||||
mv Home\ Alone.mkv.part*.rar Home\ Alone/ ? | ||||||||||
Dale. | woensdag 12 januari 2011 @ 13:44 | |||||||||
Hmmmm ik heb nu via ssh admin@<ip> ssh geopend alleen wanneer ik de commando rename uitvoer zegt die dat hij die niet kent... | ||||||||||
Blinker | woensdag 12 januari 2011 @ 14:07 | |||||||||
Rename commando bestaat ook niet voor Linux. Normaliter doe je het met het 'mv' commando (move) Voorbeeld: blinker@ubuntu:~$ mv test test2 Zo hernoemt hij het bestand test naar test2. Kijk hier voor meer linux commands: http://ss64.com/bash/ | ||||||||||
slacker_nl | woensdag 12 januari 2011 @ 16:21 | |||||||||
pssst | ||||||||||
Blinker | woensdag 12 januari 2011 @ 20:37 | |||||||||
Haha, nooit geweten! Moet zeggen dat ik mij altijd goed heb gered met mv ![]() | ||||||||||
Dale. | woensdag 12 januari 2011 @ 21:22 | |||||||||
Ja maar rename doet het nog steeds niet op ssh en bij ssh kent mv de optie -v niet waardoor ik niet eerst de output te zien krijg? | ||||||||||
slacker_nl | woensdag 12 januari 2011 @ 22:27 | |||||||||
dan doe je echo "mv stuff daar" en dan zie je wat je zou doen ![]() | ||||||||||
PiRANiA | donderdag 29 september 2011 @ 22:19 | |||||||||
Ik ga deze weer eens schoppen. Zonder reden. Hebben mensen nog interessante scriptjes? ![]() | ||||||||||
RemcoDelft | donderdag 29 september 2011 @ 22:53 | |||||||||
Ik kwam diverse (denk aan Apple) TimeMachine-achtige oplossingen tegen die allemaal niet doen wat ik precies wil. Nu heb ik er zelf maar eentje gemaakt: een simpel scriptje dat ik handmatig opstart. Het doet dit: -maak een directory in /home2/TimeMachineBackup met datum en tijd in de naam -kopieer de opgegeven mappen daarnaartoe -vergelijk (m.b.v. fdupes) alle dubbele files met de vorige versie, en hardlink alle duplicates. Fdupes kijkt niet naar filenames/locaties, maar alleen naar de inhoud van de files. Voordelen: ik heb nu een backup waarin ik oudere versies van al mijn files kan terugvinden, terwijl een nieuwe backupdatum nauwelijks diskruimte kost. Nadeel: bruut alles kopieren en daarna vergelijken zorgt voor enkele uren actief harddiskgebruik, bij voorkeur doen als ik de PC niet nodig heb dus. Voor de liefhebbers in de simpelste vorm (zelf aanpassen naar behoefte, zorg dat je weet wat je doet, ik geef GEEN garanties!):
| ||||||||||
slacker_nl | vrijdag 30 september 2011 @ 07:39 | |||||||||
Mijn rmkernel script. Getest op Debian en Ubuntu, maar werkt denk ik ook op andere Debian based systemen. | ||||||||||
Black_Ninja | dinsdag 8 mei 2012 @ 11:21 | |||||||||
Via een doorverwijzing even mijn vraag hier posten ![]() Hoeveel werk is het om dit commando te laten uitvoeren?
Ik wil het eigenlijk in een cronjob zetten zodat hij controleert of de Vbox al draait en zo nee, dan opstarten, zo ja dan zo laten. en op die Vbox zelf moet hij ook nog wat dingen doen, namelijk:
Beide moeten eigenlijk worden gecontroleerd of ze runnen 1x per uur ofzo en daarnaast moet ie 1x per dag
![]() | ||||||||||
slacker_nl | dinsdag 8 mei 2012 @ 11:28 | |||||||||
Dus die run_replication and run_server moeten 1x per uur binnen de vbox instance gedraaid worden en de shutdown moet 1x per dag gedaan worden? Dat is allemaal via een cronjob te regelen: man crontab Dat andere, je moet even kijken of vboxmanage ook een status optie heeft, dan kan je dat relatief makkelijk scripten. Ik zou er gewoon een soort van init script van maken, met start, stop, restart, status functies, dan kan je het zo leuk maken als je zelf wilt. | ||||||||||
Black_Ninja | dinsdag 8 mei 2012 @ 11:30 | |||||||||
Het commando van die Vbox is zoals ik het zelf in de commandline ingeef om hem op te starten dus ik weet dat dat werkt maar om een of andere reden als ik die regel in een cronjob of in rc.local zet dan gebeurd er niks. Als ik die .sh dingen in een cronjob wil zetten, kan ik dan gewoon dat commando zoals het daar staat er in zetten of moet ik het dan op een andere manier aanroepen? ![]() | ||||||||||
slacker_nl | dinsdag 8 mei 2012 @ 11:35 | |||||||||
Je moet het volledige path gebruiken. Bijvoorbeeld als je aptitude update vanuit de cron gaat draaien krijg je dit:
Als je zelf een script schrijft moet je zorgen dat je PATH in je script gedefinieerd is.
En uiteraard ook je script chmodden ![]() Maar begin simpel met gewoon het starten van vbox binnen een script, daarna met ps kijken of je instance draait, en dan op basis daarvan een start en status functie schrijven. Daarna kan je redelijk simpel een init script maken en die kan je gebruiken in de cron. Tevens: http://www.virtualbox.org/manual/ch07.html#vboxheadless [ Bericht 5% gewijzigd door slacker_nl op 08-05-2012 11:41:49 ] | ||||||||||
Black_Ninja | dinsdag 8 mei 2012 @ 11:41 | |||||||||
Sorry ik probeer zo snel mogelijk alles onder de knie te krijgen maar ik ben nogsteeds een groentje hiermee ![]()
![]() Want dit doet hij dus niet ![]() | ||||||||||
slacker_nl | dinsdag 8 mei 2012 @ 11:44 | |||||||||
Waarom doet ie het niet? Haal het uit rc.local en maak er een apart iets van, dan kan je dat aparte ding in rc3.d zetten en ook nog los gebruiken op de commandline, aka /etc/init.d/vboxheadless start|status etc. Dit is zeg maar iets wat ik voor bind heb getikt, zoiets moet jij ook gaan doen:
| ||||||||||
Black_Ninja | dinsdag 8 mei 2012 @ 11:50 | |||||||||
Ja dat begrijp ik dus ook niet waar hij het niet doet ![]() Maar als ik het nu allemaal in een cronjob prop, zou het dan allemaal zo extreem ingewikkeld moeten zijn? ![]() Als ik in de cronjob een @reboot commando plaats om de VM te starten na een reboot en dan op een vast tijdstip de VM laat afsluiten en dan op een vast tijdstip 2 minuten later de VM weer laat opstarten ben ik er ook. Zou je misschien een voorbeeld kunnen geven hoe het er volgens jou in cronjob uit zou moeten zien? ![]() | ||||||||||
Black_Ninja | dinsdag 8 mei 2012 @ 17:46 | |||||||||
ARG!!! Ik heb dus nu een scriptje gemaakt, als ik het handmatig uitvoer werkt het wel, in de cronjob niet! Verder heb ik het nu wel zo ver dat als de VM machine opstart hij wel het replication script uitvoert maar hij start nogsteeds de webserver niet op! ![]() | ||||||||||
PiRANiA | dinsdag 8 mei 2012 @ 18:58 | |||||||||
Kan aan path en environment vars liggen. | ||||||||||
Black_Ninja | dinsdag 8 mei 2012 @ 19:25 | |||||||||
![]() ![]() | ||||||||||
PiRANiA | dinsdag 8 mei 2012 @ 19:29 | |||||||||
Post je script eens ![]() | ||||||||||
Black_Ninja | dinsdag 8 mei 2012 @ 19:29 | |||||||||
Even mijn codes toegevoegd ![]() | ||||||||||
Black_Ninja | dinsdag 8 mei 2012 @ 19:29 | |||||||||
Was al onderweg ![]() | ||||||||||
NightH4wk | dinsdag 8 mei 2012 @ 19:29 | |||||||||
http://www.wonkity.com/~wblock/docs/html/interrupted.html Nummer 2 van de interrupted Unix FAQ. | ||||||||||
NightH4wk | dinsdag 8 mei 2012 @ 19:30 | |||||||||
Ah, te laat. | ||||||||||
Black_Ninja | dinsdag 8 mei 2012 @ 19:33 | |||||||||
Dat doe ik toch goed? ![]() | ||||||||||
PiRANiA | dinsdag 8 mei 2012 @ 19:33 | |||||||||
Het VBoxManage command hangt dus af van de user. Voer je de cron als root uit? | ||||||||||
NightH4wk | dinsdag 8 mei 2012 @ 19:34 | |||||||||
Idd. Daarom te laat. ![]() | ||||||||||
Black_Ninja | dinsdag 8 mei 2012 @ 19:35 | |||||||||
Je ziet mijn code, volgens mij roep ik het gewoon aan maar het vreemde is dat ik hem niet met sudo hoef te starten als ik het handmatig doe ![]() Als ik hem als root wil starten, hoe moet ik het dan invoeren? ![]() | ||||||||||
Black_Ninja | dinsdag 8 mei 2012 @ 19:35 | |||||||||
Gelukkig ![]() ![]() | ||||||||||
Black_Ninja | dinsdag 8 mei 2012 @ 19:52 | |||||||||
In cron root werkt het ook niet ![]() | ||||||||||
slacker_nl | dinsdag 8 mei 2012 @ 20:50 | |||||||||
su - $user -c "/path/to/cmd" of is het -e?! | ||||||||||
Black_Ninja | dinsdag 8 mei 2012 @ 21:15 | |||||||||
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Ik heb de Virtualbox werkende ![]() Om een of andere reden doet hij het niet met het @reboot commando maar dan kan ik omheen werken omdat ik hem op vaste tijdstippen kan herstarten ![]() Nu zit ik alleen nog met probleem 2. De .sh scripts op de virtualbox ![]() Het script dat ik start met
Het script dat ik start met
![]() Hoe moet ik het ./ gedeelte in een cronjob zetten? ![]() | ||||||||||
slacker_nl | dinsdag 8 mei 2012 @ 21:41 | |||||||||
Volledige path gebruiken.. | ||||||||||
Black_Ninja | dinsdag 8 mei 2012 @ 21:53 | |||||||||
helpt niet ![]() | ||||||||||
slacker_nl | dinsdag 8 mei 2012 @ 21:58 | |||||||||
Dan heb ik een pro-tip. set -x gebruiken en dan 2>> /tmp/logfile redirecten ![]() Dan krijg je debug info in een log, kek ![]() | ||||||||||
Black_Ninja | dinsdag 8 mei 2012 @ 22:30 | |||||||||
log blijft leeg maar wordt wel aangemaakt ![]() | ||||||||||
slacker_nl | dinsdag 8 mei 2012 @ 22:31 | |||||||||
uhh &2>> logfile | ||||||||||
Black_Ninja | dinsdag 8 mei 2012 @ 23:11 | |||||||||
Echt, wtf!
run_replication.sh werkt prima, runs_server.sh pakt ie niet. het enige verschil van wat ik weet is dat run_replication.sh start je met ~/ er voor en run_server.sh met ./ begin echt gek te worden ![]() | ||||||||||
slacker_nl | dinsdag 8 mei 2012 @ 23:16 | |||||||||
~/ werkt niet, dan moet je $HOME gebruiken. Volgens mij staat dat ook ergens in deze draad ![]() | ||||||||||
Black_Ninja | dinsdag 8 mei 2012 @ 23:21 | |||||||||
run_replication werkt dus, en die moest met ~/ worden gestart het is run_server.sh dat niet werkt en die werd gestart met ./ ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | ||||||||||
slacker_nl | dinsdag 8 mei 2012 @ 23:23 | |||||||||
DUDE STOP FUCKING WITH RELATIVES PATHS!!!!! ABSOLUTE PATHS PLEASE!!!!!! | ||||||||||
Black_Ninja | dinsdag 8 mei 2012 @ 23:25 | |||||||||
Die werken dus ook niet! ![]() Ik heb als eerste
| ||||||||||
slacker_nl | dinsdag 8 mei 2012 @ 23:27 | |||||||||
Dan moet je chmodden en/of je #! aanpassen en/of je PATH variabele in je script goed zetten. Niet werken is niet zo een duidelijke omschrijving ![]() | ||||||||||
NightH4wk | dinsdag 8 mei 2012 @ 23:29 | |||||||||
Weet je zeker dat het probleem niet in in .sh files zit? Environment variabelen worden overschreven. Dus vervang run_server.sh door run_replication.sh en kijk of de cron hem iig wel aanroept. | ||||||||||
Black_Ninja | dinsdag 8 mei 2012 @ 23:31 | |||||||||
Als ik meer info had zou ik het graag geven ![]() run_replication.sh staat in dezelfde map als run_server.sh dat is dus allemaal zo vreemd ![]() | ||||||||||
NightH4wk | dinsdag 8 mei 2012 @ 23:38 | |||||||||
Maar wordt het script dus aangeroepen? Indien dat het geval is dat zit het probleem in de .sh. | ||||||||||
Black_Ninja | dinsdag 8 mei 2012 @ 23:40 | |||||||||
net het even omgedraaid en ook dan wordt replication wel aangeroepen en server niet. als ik mijn eigen scriptje gebruik dan kan ik hem ook handmatig wel en niet via cronjob aanroepen. Moet ik heb dan speciale chmod rechten meegeven of iets dergelijks? | ||||||||||
Black_Ninja | woensdag 9 mei 2012 @ 09:50 | |||||||||
Inmiddels weer een stapje verder. Als ik run_server.sh opstart zie ik het een en ander gebeuren (hij geeft weer welke communicatie er plaats vind). Wanneer ik dan het ssh venster sluit sluit ook direct het script. Ik zal hem dus als een soort daemon process moeten draaien denk ik, kan iemand me op weg helpen hoe ik dat moet doen? ![]() | ||||||||||
gebrokenglas | woensdag 9 mei 2012 @ 10:00 | |||||||||
Als je een script autonoom wilt draaien, kan dat op 2 manieren methode 1: nohup Zoiets:
methode 2: at at is een mechanisme a la cron, om dingen op een later tijdstip uit te voeren. Bijvoorbeeld het starten van een scriptje om 12 uur 's middags:
In jouw geval
[ Bericht 0% gewijzigd door gebrokenglas op 10-05-2012 08:17:24 ] | ||||||||||
Black_Ninja | woensdag 9 mei 2012 @ 21:28 | |||||||||
![]() ![]() ![]() ![]() ![]() ![]() Je bent geweldig!!! HET WERKT!!! ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | ||||||||||
Dale. | dinsdag 22 mei 2012 @ 20:31 | |||||||||
scr0xaxis=$(xrandr --current | grep '*+' | uniq | awk '{print $1}' | cut -d 'x' -f1) scr0yaxis=$(xrandr --current | grep '*+' | uniq | awk '{print $1}' | cut -d 'x' -f2) scr1xaxis=$(xrandr --current | grep '* ' | uniq | awk '{print $1}' | cut -d 'x' -f1) scr1yaxis=$(xrandr --current | grep '* ' | uniq | awk '{print $1}' | cut -d 'x' -f2) $((element00=scr0xaxis/(scr0xaxis + scr1xaxis))) $((element11=scr0yaxis/scr1yaxis)) echo -e $element00 echo -e $element11 Ik krijg steeds 0 0 terwijl het 0.5 0.78125 zou moeten zijn (scr0xaxis = scr1xaxis = 1280, scr0yaxis = 800, scr1yaxis = 1024) | ||||||||||
slacker_nl | dinsdag 22 mei 2012 @ 20:36 | |||||||||
Post eens de output van xrandr --current Never mind, zie het al printf "%.2f\n" $ding ![]() En anders moet je met bc werken: echo "scale = 4 ; $x + $y" | bc ben je er ook. | ||||||||||
Dale. | dinsdag 22 mei 2012 @ 21:07 | |||||||||
Oke maar ik gebruik de variabele $element00 en $element11 eigenlijk niet om te echo-en ik wou het puur even printen om te debuggen... maar hoe kan ik het gebruiken in een commando? Dit is het geheel...
wil het gebruiken om de xinput transformatie matrix aan te passen van mijn stylus. | ||||||||||
slacker_nl | dinsdag 22 mei 2012 @ 21:24 | |||||||||
nee, drop ff die output (heb hier geen linux bak dus enzo..) btw, beetje optimalisatie:
[ Bericht 0% gewijzigd door slacker_nl op 22-05-2012 21:30:43 ] | ||||||||||
relativity | woensdag 12 december 2012 @ 18:28 | |||||||||
Is er hier nog leven? Ik kan wel wat hulp gebruiken hehe. | ||||||||||
slacker_nl | woensdag 12 december 2012 @ 18:33 | |||||||||
Stel je vraag | ||||||||||
µ | woensdag 12 december 2012 @ 18:45 | |||||||||
Hallo ![]() | ||||||||||
whoops | woensdag 12 december 2012 @ 20:56 | |||||||||
| ||||||||||
Dale. | donderdag 13 december 2012 @ 12:02 | |||||||||
relativity | donderdag 13 december 2012 @ 18:55 | |||||||||
Oke bedankt! :-) Allereerst: Ik ben vrij basaal met het bash programmeren, maar vind het wel degelijk interessant! Ik ben bezig geweest met een bash scriptje om mijn mp3 collectie wat op te schonen van vervelende tags e.d. Echter moet ik mijn script meerdere malen uitvoeren om alles toe te passen op de bestanden. Het script is als volgt:
Tweede stap: Nu ben ik ook bezig om er iets dergelijks in te bouwen zoals dit:
Hoe krijg ik dit in een script verwerkt? ![]() Bij voorbaat dank ![]() | ||||||||||
slacker_nl | donderdag 13 december 2012 @ 20:03 | |||||||||
Ik zou zelf met find werken, ik neem even aan dat je mp3's in subdirs hebt staan. Als ik dit script loslaat op m'n eigen music dir doet het namelijk helemaal niks.
Verder kan je met basename en dirname werken (dat $filepath gedeelte) Een andere tip is om dat hele rename gebeuren in een functie te frotten, je kan dan met een subset dingen testen
Je zou daarna de mp3tags kunnen aanpassen in dezelfde loop, de nieuwe filename return je dan in je my_rename_func
En de functie tag the stuff doe je al het spul wat je leuk om te mee te taggen. | ||||||||||
relativity | donderdag 13 december 2012 @ 20:19 | |||||||||
Nee alles staat gewoon in een dir; lekker makkelijk.
![]() Oke, nog nooit gedaan, maar ga ik eens proberen ![]() Ga ik proberen ![]() Hier raak je mij een beetje kwijt haha! Bedoel je tag_the_stuff als functie aanmaken en dan callen in die loop? Krijg hoofdpijn van die loops lol. Maar goed. Bedankt voor de constructieve feedback. Kan ik morgen even verder gaan ![]() | ||||||||||
relativity | donderdag 13 december 2012 @ 20:21 | |||||||||
Het is een beetje lastig op Xubuntu... In gedit zag je tenminste gekleerde tekst. Nou heb ik lap zwarte tekst. Enige tips hiervoor? Want dit werkt niet echt fijn. Zoiets bedoel je? (even snel geknipt/geplakt)
[ Bericht 47% gewijzigd door relativity op 13-12-2012 20:36:18 ] | ||||||||||
RemcoDelft | donderdag 13 december 2012 @ 20:49 | |||||||||
vi/vim/elvis o.i.d. gebruiken? 't Is even wennen, maar daarna wil je niets anders meer! | ||||||||||
relativity | donderdag 13 december 2012 @ 20:51 | |||||||||
Dat is allemaal commandline hè? Hoewel ik daar een groot voorstander van ben, vind ik een GUI toch wat fijner werken met het schrijven van scripts ![]() Ahh vim is grapical ![]() [ Bericht 11% gewijzigd door relativity op 13-12-2012 21:10:20 ] | ||||||||||
RemcoDelft | donderdag 13 december 2012 @ 21:11 | |||||||||
Wat moet je met een GUI als je een script typt? Vi is ontworpen om snel mee te werken, leer het, en je bent sneller dan steeds je muis te pakken. Klein voorbeeld, regel kopieren: yyp, dat kost iets van 0.3 seconden. | ||||||||||
relativity | donderdag 13 december 2012 @ 21:15 | |||||||||
Tjah het gaat met niet zozeer om snelheid. Ik doe dit enkel om er wat van te leren. GUI vind ik het makkelijkste, vandaar mijn keuze. | ||||||||||
KomtTijd... | dinsdag 8 januari 2013 @ 02:36 | |||||||||
ok ik ben een beetje nieuw met shell scripting, en ik krijg een foutmelding die ik niet helemaal begrijp:
de 1e loop gaat dus goed, daarna niet meer. Verslikt'ie zich in het feit dat ik new_host_up iedere keer probeer te overschrijven ofzo? -edit- doel van het scriptje is natuurlijk dat'ie iedere 5 seconden checkt of mijn smartphone aanwezig is (ergo of ik thuis ben). | ||||||||||
NightH4wk | dinsdag 8 januari 2013 @ 04:21 | |||||||||
Hmm, zet eens " om de vars in de if. Dus "$new_hosts_up" -ne "$host_up". | ||||||||||
µ | dinsdag 8 januari 2013 @ 08:49 | |||||||||
while true? of while sleep 5? | ||||||||||
KomtTijd... | dinsdag 8 januari 2013 @ 10:52 | |||||||||
while True. Moet een startup scriptje worden op mijn router dat iedere 5 seconden kijkt of ik (mijn telefoon) thuis ben. zal zodadelijk die aanhalingstekens proberen als ik weer een device met toetsenbord in mijn handen heb. | ||||||||||
µ | dinsdag 8 januari 2013 @ 10:54 | |||||||||
True inderdaad (post kwam van mobiel). Kijk ook even of je host_up= wil definieren als host_up=0. Wellicht helpt dat. ![]() | ||||||||||
KomtTijd... | dinsdag 8 januari 2013 @ 14:45 | |||||||||
Het waren de aanhalingstekens van NightH4wk ![]() | ||||||||||
KomtTijd... | dinsdag 8 januari 2013 @ 21:04 | |||||||||
Pfft het waren toch niet die aanhalingstekens. Ik snap er helemaal niets meer van. Hoe fucking moeilijk kan het zijn om gewoon 2 variables tegen elkaar te vergelijken? Enkele haakjes, dubbele haakjes, ronde haakjes, wel/geen dollartekens, wel/geen aanhalingstekens... heb alles zitten proberen maar niets levert het gewenste resultaat. | ||||||||||
Cid | dinsdag 8 januari 2013 @ 21:23 | |||||||||
Voor de brainiacs onder ons, iemand een verklaring voor het volgende verschijnsel?
Vooralsnog alleen voor elkaar gekregen op virtuele machines met RHEL/CentOS 5.8... | ||||||||||
KomtTijd... | dinsdag 8 januari 2013 @ 21:26 | |||||||||
php op de router geinstalleerd en het is in 5 minuten gepiept ![]()
| ||||||||||
RemcoDelft | dinsdag 8 januari 2013 @ 21:32 | |||||||||
Ik gebruik uitsluitend bash, geen sh, dus ken de verschillen in details niet. En ik kan hier niet zien wat "iw dev wlan0 station dump | grep -c **.**.**.**.**.**" voor output zou moeten geven: kan je dat hier dumpen? In bash zou ik gewoon dit doen: while test 1; do ping -c 5 192.168.a.b > /dev/null && echo 'Host is up'; done Met 192.168.a.b het lokale IP wat je natuurlijk vast zet. | ||||||||||
KomtTijd... | dinsdag 8 januari 2013 @ 21:52 | |||||||||
Dat commando kijkt of de device (het mac-adres) in de verbonden stations voorkomt. Werkt prima, geeft 0 terug indien niet, en 1 of hoger indien wel. Ping werkt niet want als je telefoon in sleep gaat kun je 'm niet meer pingen. (bovendien wil je niet iedere 5 seconden een ping naar je telefoon sturen denk ik). Ik wist niet dat er nog verschil zit tussen sh en bash, dus ook maar even Bash geinstalleerd en weer een paar verschillende combinaties geprobeerd, maar het maakt geen verschil. Ik hou het wel mooi op PHP.
[ Bericht 24% gewijzigd door KomtTijd... op 08-01-2013 21:59:08 ] | ||||||||||
slacker_nl | dinsdag 8 januari 2013 @ 22:01 | |||||||||
Simpel toch. echo foo | grep $(echo foo | grep foo) dat is zoek foo in foo en dat laat ie zien en dan is de return code 0, bij false is de return code > 0, of 1 in dit geval. En daarna een /bin/false.. apart, erg apart. (zsh)$ echo foo | grep -q $(echo foo | grep foo) 22:02 pts/2 0 xxx (zsh)$ /bin/false 22:02 pts/2 1 xxx na pts/2 is de return code. | ||||||||||
slacker_nl | dinsdag 8 januari 2013 @ 22:05 | |||||||||
sh is zo goed als dood, je hebt op Solaris nog sh, maar dat is grotendeels hele oude versies. Op Debian based bakken is het vaak dash. | ||||||||||
µ | dinsdag 8 januari 2013 @ 23:08 | |||||||||
dash? | ||||||||||
NightH4wk | dinsdag 8 januari 2013 @ 23:26 | |||||||||
sh is niet zo goed als dood, het is gewoon een implementatie van IEEE POSIX 1003.2. Gewoon lekker basic en dat is goed, om systeem scripts uit te voeren, etc. | ||||||||||
KomtTijd... | woensdag 9 januari 2013 @ 01:04 | |||||||||
![]() ![]() | ||||||||||
slacker_nl | woensdag 9 januari 2013 @ 06:41 | |||||||||
| ||||||||||
slacker_nl | woensdag 9 januari 2013 @ 07:07 | |||||||||
Welke systemen draaien nog de native bourne shell? Dat zijn er vrij weinig volgens mij. | ||||||||||
Cid | woensdag 9 januari 2013 @ 08:54 | |||||||||
De nested pipe in de command substitution veroorzaakt dat de returncodes niet meer kloppen. Bugreportje aangemaakt.. | ||||||||||
NightH4wk | woensdag 9 januari 2013 @ 14:03 | |||||||||
De BSDs en Android? | ||||||||||
Dale. | zaterdag 23 februari 2013 @ 17:22 | |||||||||
Vraagje... heeft iemand hier een script die t volgende kan? Ik heb een folder. Hierin zitten allemaal plaatjes. Nu heb ik een boel dubbele files omdat zij van naam verschillenen. Nu is het veel te veel werk om dit allemaal na te gaan. Daarom zoek een script dat eigenlijk dus checkt welke plaatjes dus allemaal dubbel zijn en dubbele plaatjes verwijderd. | ||||||||||
NightH4wk | zaterdag 23 februari 2013 @ 17:29 | |||||||||
Maak een hash van elke picca en delete de dubbelen? Zijn scripts voor te vinden. | ||||||||||
Dale. | zaterdag 23 februari 2013 @ 17:34 | |||||||||
Ja heb net deze gevonden die alles checkt;
En deze die alle dubbele delete
Nu even kijken hoe ik deze recursief kan maken ![]() | ||||||||||
relativity | zaterdag 23 februari 2013 @ 17:39 | |||||||||
Volgens mij doet je find command dat al automatisch als ik het goed heb. | ||||||||||
µ | zaterdag 23 februari 2013 @ 19:29 | |||||||||
fdupes ![]() | ||||||||||
µ | zaterdag 23 februari 2013 @ 19:30 | |||||||||
$ fdupes --recursive --noempty /pad/naar/directory geeft bloedjesnel alle overeenkomende bestanden. Hij zoekt eerst recursief alles, vergelijkt daarna op grootte en daarna op hash. | ||||||||||
RemcoDelft | zaterdag 23 februari 2013 @ 23:07 | |||||||||
fdupes is inderdaad fantastisch spul! Voor ik dat vond had ik zelf zoiets in elkaar gescript... fdupes is veel beter. | ||||||||||
µ | zaterdag 23 februari 2013 @ 23:37 | |||||||||
heb er inderdaad een mooi script voor weggegooid ![]() | ||||||||||
relativity | vrijdag 1 maart 2013 @ 22:19 | |||||||||
Even nog een vraag voor de script guru's: Ik heb een script die de applicatie status gecontroleerd. Hij controleert op de applicaties al gestart zijn en als dat niet geval is, doet dit script dat voor mij. Echter ontstaat het probleem dat hij de applicaties na elkaar controleert (PGREP) en gaat dus alleen verder als de exit status van de vorige applicatie nul is, ergo hij start de rest van de applicaties niet op. Dit heb ik deels weten te omzeilen om programma's als daemon te starten, maar de opeenvolgende programma's hebben die mogelijkheid niet (sickbeard & autosub).
Heeft het zin om de output te verwijzen naar /dev/null 2>&1 om dit probleem te omzeilen of hoe kan ik dit het best aanpakken. BVD ![]() | ||||||||||
µ | vrijdag 1 maart 2013 @ 22:22 | |||||||||
Ik doe het zo:
![]() | ||||||||||
relativity | zondag 3 maart 2013 @ 21:23 | |||||||||
Ja dat weet ik dat dat zo kan, alleen weet ik niet hoe ik dit in mijn script moet verwerken, omdat het afzonderlijke commands zijn. | ||||||||||
Dale. | donderdag 21 maart 2013 @ 20:48 | |||||||||
Weet iemand of het volgende kan in VIM? En zo ja hoe? Bij het copy/paste/delete in VISUAL mode kan ik iets kopieren en dan maar één keer pasten. Ik wil iets kopieren en dan ongelimiteerd pasten zonder dat ik dus die copy actie weer opnieuw moet doen. Hoe doe ik dat? | ||||||||||
slacker_nl | donderdag 21 maart 2013 @ 21:06 | |||||||||
Je kan het in een paste buffer stoppen, even vergeten hoe ookalweer. Select block, shift " [a-z] y (om te yanken). dan shift " [a-z] p (om te pasten). en a-z zijn dan je buffers, dus je kan een buffer in a hebben, in b en die zijn verschillend. En dat werkt ook tussen files in dezelfde vim sessie. | ||||||||||
Dale. | donderdag 21 maart 2013 @ 21:07 | |||||||||
Super! Ga even proberen dan ![]() | ||||||||||
slacker_nl | donderdag 21 maart 2013 @ 21:12 | |||||||||
Moet lukken, ik heb het net getest ![]() | ||||||||||
Dale. | donderdag 21 maart 2013 @ 21:15 | |||||||||
| ||||||||||
KomtTijd... | donderdag 11 juli 2013 @ 14:14 | |||||||||
line 2 [: missing `]' ...en hij gaat naar het else statement, terwijl echo ${running} wel degelijk "Slave_SQL_Running: Yes" laat zien... Weet iemand wat ik fout doe? -edit- fixed == moest zijn = en hij struikelde over whitespaces. [ Bericht 3% gewijzigd door KomtTijd... op 11-07-2013 14:37:58 ] | ||||||||||
slacker_nl | donderdag 11 juli 2013 @ 18:39 | |||||||||
Waarom zou je dat doen? als je echo bla | grep -q bla doet dan weet je de return value van grep en dan kan je met een simpele stukje code eea fixen:
| ||||||||||
KomtTijd... | donderdag 11 juli 2013 @ 19:09 | |||||||||
omdat 3 woorden: quick and dirty. maar die tip ga ik er morgen toch wel even in verwerken denk ik |