abonnement Unibet Coolblue Bitvavo
pi_56019425
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.

1
2
3
4
5
echo $SHELL
# Of
env | grep SHELL
# en ter overbodigheid
grep username /etc/passwd | awk -F\/ '{print $NF}'


Dit is echter geen garantie dat je ook daadwerkelijk de shell draait waar je op dat moment mee werkt. Kijk maar:

1
2
3
4
#zsh is mijn standaard shell
$ bash
$ echo $SHELL
/bin/zsh


Om er dan achter te komen welke shell je echt draait, kan je dit uitvoeren:
1echo `ps -p $$` 


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 ]
In theory there is no difference between theory and practice. In practice there is.
  maandag 14 januari 2008 @ 11:48:51 #2
65490 whoops
Home is where the heart is...
pi_56019977
1
2
3
4
5
6
7
#!/bin/bash
CHARS=(t v p)
for C in ${CHARS[@]}
do
    echo -n $C
done
echo ''


In the beginning, the universe was created. This made a lot of people very angry and has been widely regarded as a bad move.
  maandag 14 januari 2008 @ 12:11:53 #3
126003 Daniel1976
de omnibus dubitandum
pi_56020533
-edit-

[ Bericht 83% gewijzigd door Sander op 14-01-2008 12:52:19 ]
  maandag 14 januari 2008 @ 12:12:20 #4
126003 Daniel1976
de omnibus dubitandum
pi_56020542
--

[ Bericht 93% gewijzigd door Sander op 14-01-2008 16:06:55 ]
  maandag 14 januari 2008 @ 12:14:36 #5
17137 Sander
Nerds do it rarely
pi_56020595
Dat kan je je postrechten kosten Daniel. Zeg maar voor altijd.
  maandag 14 januari 2008 @ 12:51:17 #6
65490 whoops
Home is where the heart is...
pi_56021488
quote:
Op maandag 14 januari 2008 12:11 schreef Daniel1976 het volgende:
apt-get install humor?
In the beginning, the universe was created. This made a lot of people very angry and has been widely regarded as a bad move.
pi_56021547
quote:
Op maandag 14 januari 2008 12:14 schreef Slarioux het volgende:
Dat kan je je postrechten kosten Daniel. Zeg maar voor altijd.
Daarbij zijn dat commando's die zo ontzettend zielig zijn om te roepen in dit soort topics.

Interessant topic, deze reactie tevens als TVP.
The past is what made you, but the future is what you're gonna make!
pi_56021584
quote:
Op maandag 14 januari 2008 12:14 schreef Slarioux het volgende:
Dat kan je je postrechten kosten Daniel. Zeg maar voor altijd.
nee, dit kost je postrechten:

DUS NIET UITVOEREN APEN!!

[ Bericht 1% gewijzigd door Sander op 14-01-2008 13:14:04 (niet doen) ]
In theory there is no difference between theory and practice. In practice there is.
  maandag 14 januari 2008 @ 15:06:44 #9
84926 WyriHaximus
Release the hounds smithers!
pi_56024615
Zo ook maar ff een TVPtje maken .
phluphy for president!
  maandag 14 januari 2008 @ 15:46:47 #10
187069 slacker_nl
Sicko pur sang
pi_56025420
quote:
Op maandag 14 januari 2008 12:54 schreef slacker_nl het volgende:
nee, dit kost je postrechten:
mietje slar
In theory there is no difference between theory and practice. In practice there is.
pi_56072494
quote:
Op maandag 14 januari 2008 11:48 schreef whoops het volgende:

[ code verwijderd ]

Wat doet 't ofzo? Ik ken niks van code dus zou wel graag weten wat 't is voor ik 't eens uitprobeer
  woensdag 16 januari 2008 @ 13:57:51 #12
65490 whoops
Home is where the heart is...
pi_56072601
quote:
Op woensdag 16 januari 2008 13:52 schreef tony_clifton- het volgende:

[..]

Wat doet 't ofzo? Ik ken niks van code dus zou wel graag weten wat 't is voor ik 't eens uitprobeer
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.
In the beginning, the universe was created. This made a lot of people very angry and has been widely regarded as a bad move.
pi_56073096
Ah k
ingewikkeld!
  woensdag 16 januari 2008 @ 16:06:51 #14
187069 slacker_nl
Sicko pur sang
pi_56076030
quote:
Op woensdag 16 januari 2008 13:57 schreef whoops het volgende:

[..]

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.
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'

1
2
3
4
5
6
7
8
16:03 pts/9 0 wesleys@eniac:/home/wesleys$ enter() { echo "Enter the shell" }
16:03 pts/9 0 wesleys@eniac:/home/wesleys$ which enter
enter () {
        echo "Enter the shell"
}
16:03 pts/9 0 wesleys@eniac:/home/wesleys$ enter
Enter the shell
16:03 pts/9 0 wesleys@eniac:/home/wesleys$
In theory there is no difference between theory and practice. In practice there is.
  donderdag 17 januari 2008 @ 12:48:54 #15
65490 whoops
Home is where the heart is...
pi_56100073
quote:
Op woensdag 16 januari 2008 14:17 schreef tony_clifton- het volgende:
Ah k
ingewikkeld!
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.
In the beginning, the universe was created. This made a lot of people very angry and has been widely regarded as a bad move.
pi_56145338
even een tvp want dit is verdomdig handig.
pi_56705298
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/
In theory there is no difference between theory and practice. In practice there is.
  woensdag 18 juni 2008 @ 22:48:16 #18
65490 whoops
Home is where the heart is...
pi_59503393
Bashers!

Ik heb het volgende stuk code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/bin/bash

# Define backtitle
BACKTITLE="Nice message you got here!"

# Define header text
HEADER="This text acts like a header!"

# Define box format, Height, Width, List Height
SIZE_H=20
SIZE_W=50
SIZE_L=30

dialog --backtitle "$BACKTITLE" --checklist "$HEADER" $SIZE_H $SIZE_W $SIZE_L \
      "Choice 1" "Description One!"       ON  \
      "Choice 2" "Second Description!"    ON  \
      "Choice 3" "Third and Last!"       OFF \
      2> /tmp/checklist.tmp.$$

retval=$?

choice=`cat /tmp/checklist.tmp.$$`
rm -f /tmp/checklist.tmp.$$

case $retval in
  0)
    if [ -n "$choice" ]
    then
        echo "You chose: $choice"
    else
        echo "Can't choose?"
    fi;; 
  1)
    echo "Cancel pressed.";;
  255)
    echo "ESC pressed.";;
esac


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?
In the beginning, the universe was created. This made a lot of people very angry and has been widely regarded as a bad move.
  donderdag 19 juni 2008 @ 01:21:34 #19
187069 slacker_nl
Sicko pur sang
pi_59507613
Ff dit aanpassen in je voorbeeld, anders kan ik die checklist dialog niet maken..

1
2
3
4
# Define box format, Height, Width, List Height
SIZE_H=20
SIZE_W=50
SIZE_L=3
In theory there is no difference between theory and practice. In practice there is.
  donderdag 19 juni 2008 @ 01:41:55 #20
187069 slacker_nl
Sicko pur sang
pi_59507810
Gebruik van arrays :)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/bin/bash

# Define backtitle
BACKTITLE="'Nice message you got here!'"

# Define header text
HEADER="'This text acts like a header!'"

# Define box format, Height, Width, List Height
SIZE_H=20
SIZE_W=50
#SIZE_L=3

choices[0]="'Choice 1' 'Description one!' ON"
choices[1]="'Choice 2' 'Description two!' ON"
choices[2]="'Choice 3' 'Description three!' OFF"
choices[3]="'Choice 4' 'Description four!' ON"
choices[4]="'Choice 5' 'Description five!' ON"

SIZE_L=${#choices[@]}

for ((a=0; a < SIZE_L ; a++)); do
    line="$line ${choices[$a]}"
done

choice=$(eval dialog --stdout --backtitle $BACKTITLE --checklist $HEADER $SIZE_H $SIZE_W $SIZE_L $line);

retval=$?

case $retval in
  0)
    if [ -n "$choice" ]
    then
        echo "You chose: $choice"
    else
        echo "Can't choose?"
    fi;;
  1)
    echo "Cancel pressed.";;
  255)
    echo "ESC pressed.";;
esac
In theory there is no difference between theory and practice. In practice there is.
  donderdag 19 juni 2008 @ 09:58:42 #21
65490 whoops
Home is where the heart is...
pi_59510892
Thanks dude, hier kan ik zeker wel wat mee...
In the beginning, the universe was created. This made a lot of people very angry and has been widely regarded as a bad move.
  dinsdag 24 juni 2008 @ 18:45:42 #22
65490 whoops
Home is where the heart is...
pi_59657297
Ik heb 2 vragen.

1: is er een makkelijkere manier om $i met 1 op te hogen?

1i=`echo $((i+1))`


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?

1
2
3
4
5
6
7
8
9
10
#!/bin/bash

CONFIG_FILE_A='/home/whoops/.server-control'
CONFIG_FILE_B='~/.server-control'

echo $CONFIG_FILE_A
echo $CONFIG_FILE_B

if [ -f "$CONFIG_FILE_A" ]; then echo "A exists"; fi
if [ -f "$CONFIG_FILE_B" ]; then echo "B exists"; fi
In the beginning, the universe was created. This made a lot of people very angry and has been widely regarded as a bad move.
  dinsdag 24 juni 2008 @ 19:24:09 #23
187069 slacker_nl
Sicko pur sang
pi_59658032
quote:
Op dinsdag 24 juni 2008 18:45 schreef whoops het volgende:
Ik heb 2 vragen.

1: is er een makkelijkere manier om $i met 1 op te hogen?
[ code verwijderd ]
Je haalt nu twee dingen door elkaar;

i=`expr $i + 1`

en

i=$((i + 1))

Die echo is niet noodzakelijk in beide gevallen.
quote:
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?

[ code verwijderd ]
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash

CONFIG_FILE_A="$HOME/.env.local"
CONFIG_FILE_B="~/.env.local"

for i in $CONFIG_FILE_A $CONFIG_FILE_B ; do
    if [ -f "$i" ]; then
        echo "'$i' exists";
        # Pick any
        . $i 
        source $i 
    fi
done


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.
In theory there is no difference between theory and practice. In practice there is.
  dinsdag 24 juni 2008 @ 19:44:17 #24
147503 Iblis
aequat omnis cinis
pi_59658469
quote:
Op donderdag 19 juni 2008 01:41 schreef slacker_nl het volgende:
Gebruik van arrays
[ code verwijderd ]
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.)
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
  dinsdag 24 juni 2008 @ 19:47:11 #25
187069 slacker_nl
Sicko pur sang
pi_59658536
quote:
Op dinsdag 24 juni 2008 19:44 schreef Iblis het volgende:

[..]

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.)
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 ]
In theory there is no difference between theory and practice. In practice there is.
  dinsdag 24 juni 2008 @ 20:31:53 #26
65490 whoops
Home is where the heart is...
pi_59659571
quote:
Op dinsdag 24 juni 2008 19:24 schreef slacker_nl het volgende:
i=$((i + 1))
quote:
$HOME gebruiken
Dit waren degene die ik zocht, thanks slack...
In the beginning, the universe was created. This made a lot of people very angry and has been widely regarded as a bad move.
  dinsdag 24 juni 2008 @ 20:47:57 #27
147503 Iblis
aequat omnis cinis
pi_59659992
quote:
Op dinsdag 24 juni 2008 19:47 schreef slacker_nl het volgende:
Maar hoe zou je dit, voor de lol, in sh compatibel code willen doen dan?
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.

1
2
3
foo=bar
bar=baz
eval echo \$$foo


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:

1eval echo $bar


En dan wordt ‘echo $bar’ geëvalueerd, wat ‘baz’ levert. Zo gaat het ook met je arrays:

1
2
3
4
5
6
7
foo0="foo zero"
foo1="foo one"
foo2="foo two"
foo3="foo three"
for i in 0 1 2 3; do
        eval echo \$foo$i;
done;


Dit kan heel traag worden als je b.v. meerdere indices gebruikt, het eval-commando is namelijk vrij traag.
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
  dinsdag 24 juni 2008 @ 22:46:41 #28
65490 whoops
Home is where the heart is...
pi_59663606
quote:
Op dinsdag 24 juni 2008 20:47 schreef Iblis het volgende:

[..]

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.
[ code verwijderd ]

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:
[ code verwijderd ]

En dan wordt ‘echo $bar’ geëvalueerd, wat ‘baz’ levert. Zo gaat het ook met je arrays:
[ code verwijderd ]

Dit kan heel traag worden als je b.v. meerdere indices gebruikt, het eval-commando is namelijk vrij traag.
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...
In the beginning, the universe was created. This made a lot of people very angry and has been widely regarded as a bad move.
pi_59666911
quote:
Op dinsdag 24 juni 2008 20:47 schreef Iblis het volgende:
Dit kan heel traag worden als je b.v. meerdere indices gebruikt, het eval-commando is namelijk vrij traag.
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 Je kan makkelijker opties toevoegen, tenminste, je hoeft niet ook nog eens je for loop te definieren.

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.

1
2
3
4
5
6
7
8
9
10
function add_choice() {
    if [ -n "$1" ] ; then
        CHOICES="$CHOICES $1"
        LIMIT=$((LIMIT + 1))
        #LIMIT=`expr $LIMIT + 1`
    else
        CHOICES=""
        LIMIT=0
    fi
}


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
  donderdag 28 augustus 2008 @ 11:37:51 #30
74548 Jo0Lz
Lick the box!
pi_61187918
Centraal.
Yes we can! | I didn't fail, it's just postponed success.
pi_61190721
quote:
Op donderdag 28 augustus 2008 11:37 schreef Jo0Lz het volgende:
Centraal.
Goeie zaak, want ik had dit topic nog niet eerder opgemerkt!
quote:
Op maandag 14 januari 2008 11:22 schreef slacker_nl het volgende:
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!
Het kan ook erger (spreek ik uit ervaring... 8)7 8)7 ):
1cd /tmp; rm -rf .*

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
censuur :O
  donderdag 28 augustus 2008 @ 13:39:48 #32
147503 Iblis
aequat omnis cinis
pi_61191184
quote:
Op donderdag 28 augustus 2008 13:22 schreef RemcoDelft het volgende:
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
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!
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
pi_61841228
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.

1
2
3
4
5
6
7
string="zone "asdf.asdf" {type master;file "/etc/bind/zones/asdf.asdf.db";allow-transfer{none;};};"
regex="};"
if [[ "$string" =~ $regex ]]; then
     echo "Jay, ik heb ${#BASH_REMATCH[*]} keer een }; gevonden";
else
     echo "He verdorie, niets..";
fi


echter komt hier altijd 1 uit.

Toen ben ik verder gaan zoeken, en toen had ik zoiets als dit
1
2
3
#get number of { and substract one.
nr=`echo "$string" | tr "{" "\n" | wc -l`
let nr=nr-1;


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?
  dinsdag 23 september 2008 @ 10:07:12 #34
65490 whoops
Home is where the heart is...
pi_61844711
Volgens mij werkt je methode met tr en wc wel hoor.

1
2
3
4
5
$ string="en { dat { is { een { en { dat { is { twee en } dat } is } drie } en } dat } is } vier "
$ echo "$string" | tr "}" "\n" | wc -l
8
$ echo "$string" | tr "{" "\n" | wc -l
8


Ik zou overigens niet weten of het efficienter kan.
In the beginning, the universe was created. This made a lot of people very angry and has been widely regarded as a bad move.
pi_61848689
quote:
Op dinsdag 23 september 2008 10:07 schreef whoops het volgende:
Volgens mij werkt je methode met tr en wc wel hoor.
[ code verwijderd ]

Ik zou overigens niet weten of het efficienter kan.
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 "};"

  donderdag 25 september 2008 @ 08:23:23 #36
147503 Iblis
aequat omnis cinis
pi_61896354
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:

1
2
3
4
5
6
7
8
9
string="en { dat { is { een {; en { dat { is { twee en } dat } is } drie } en } dat } is \n}\n; vier "
nstring=$(echo $string | tr -d -C '{};')
leftcount=$(echo $nstring | grep -o '{' | wc -l)
rightcount=$(echo $nstring | grep -o '}' | wc -l)
if echo "$nstring" | grep -q '};$' &&  test $leftcount -eq $rightcount; then
        echo 'bingo';
else
        echo 'jammer'
fi;


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.
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
pi_61903539
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)
  donderdag 25 september 2008 @ 16:40:59 #38
147503 Iblis
aequat omnis cinis
pi_61908319
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.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
BEGIN {
        counter = 0;
        done = 0;
}
{
        for (i = 1; i <= length($0); i++) {
                c = substr($0, i, 1);
                if (c== "{") {
                        counter++
                        done = 0;
                } else if (c == "}") {
                        if (counter == 0) {
                                print "Meer } dan { gevonden!";
                                exit 1;
                        }
                        counter--;
                } else if (c == ";" && counter == 0) {
                        done = 1;
                }
        }
}
END {
        if (counter > 0) {
                print "Enkele { zijn niet afgesloten!";
                exit 1;
        }
        if (!done) {
                print "Geen afsluitende ';' gevonden!"
                exit 1;
        }
        print "Alles in orde."
}
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
pi_61982165
quote:
Op donderdag 25 september 2008 16:40 schreef Iblis het volgende:
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.
[ code verwijderd ]


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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
zone "asdf.asdf" {type master;file "/etc/bind/zones/asdf.asdf.db";allow-transfer{none;};};

Maar ook:

zone "asdf.net"
{

type master;
file "/etc/bind/zones/asdf.net.db";};

   zone "asdf.com" { //some comment here
        type master;
        file "/etc/bind/zones/asdf.com.db";
        allow-transfer


        {
                none;
}

;
};


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..
  zondag 28 september 2008 @ 21:58:12 #40
147503 Iblis
aequat omnis cinis
pi_61982321
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.
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
pi_61988080
quote:
Op zondag 28 september 2008 21:58 schreef Iblis het volgende:
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.
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
  dinsdag 23 december 2008 @ 14:22:10 #42
187069 slacker_nl
Sicko pur sang
pi_64283768
Weet iemand hoe het komt dat bash hetvolgende doet;

1
2
3
bla=$(find . -print) 
echo $bla
. ./CS01.WANA-EAS.FI.2008.048.v02.csv ./CS01.BBDD-DSL.FI.2008.018.v02.csv ./rrd.ppt


Zsh doet dit, en dit is wat ik wil:
1
2
3
4
5
6
bla=$(find . -print) 
echo $bla
.
./CS01.WANA-EAS.FI.2008.048.v02.csv
./CS01.BBDD-DSL.FI.2008.018.v02.csv
./rrd.ppt



-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 ]
In theory there is no difference between theory and practice. In practice there is.
  dinsdag 23 december 2008 @ 14:38:00 #43
29444 RemcoDelft
4 8 15 16 23 42
pi_64284449
Waarom find . -print? Doet dat niet hetzelfde als gewoon "find"?

Ik gebruik altijd zoiets, veel inzichtelijker:
for i in `find`; do echo $i; done
censuur :O
  dinsdag 23 december 2008 @ 14:41:04 #44
187069 slacker_nl
Sicko pur sang
pi_64284585
quote:
Op dinsdag 23 december 2008 14:38 schreef RemcoDelft het volgende:
Waarom find . -print? Doet dat niet hetzelfde als gewoon "find"?

Ik gebruik altijd zoiets, veel inzichtelijker:
for i in `find`; do echo $i; done
Kan ook zonder de -print. Gebruik ze beide. Maar ik hoef niet over find te loopen.

Uit de man page van find:
quote:
If no expression is present, -print will be used as the
expression. Otherwise, if the given expression does not con-
tain any of the primaries -exec, -ok or -print, the given
expression will be effectively replaced by:

( given_expression ) -print
En als niet perse sh compatible code hoeft te schrijven $() is veel sneller dan backticks.

for i in $(find . ) ; do echo $i ; done
In theory there is no difference between theory and practice. In practice there is.
  dinsdag 23 december 2008 @ 17:38:18 #45
147503 Iblis
aequat omnis cinis
pi_64291258
$() 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.
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
pi_64322877
Op solaris 8:

cat x.sh
#!/bin/sh

echo $(ls)

chmod +x x.sh
./x.sh
./x.sh: syntax error at line 3: `(' unexpected
In theory there is no difference between theory and practice. In practice there is.
pi_72613782
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/bin/bash

TOTAL_MEM=0
TOTAL_PROC=0
DIV=$(perl -e 'print "-" x 40')

printf "%-10s %-18s %-10s\n" pid name anon_mem

echo $DIV

pgrep -lf "^ora_j"| sort -k2 | while read pid name junk ; do
    [ -z "$pid" ] && continue
    RES=$(pmap -x $pid 2>/dev/null)
    [ $? -ne 0 ] && continue
    RES=$(echo -e "$RES"  |tail -1 | awk '{NF=NF-1} {print $NF}' )
    printf "%-10d %-18s %-10d\n" $pid $name $RES
    TOTAL_MEM=$(($TOTAL_MEM + $RES))
    TOTAL_PROC=$((TOTAL_PROC +1 ))
    # Just for testing
    [ $TOTAL_PROC -eq 5 ] && break
done

TOTAL_MEM_GB=$(echo "scale = 4; ($TOTAL_MEM/1024)/1024"|bc)
echo $DIV
printf "TOTALS\n%-10s %-18s %-10s" procs "anon_mem kb" "anon_mem Gb"
echo $DIV

printf "%-10s %-18s %-10s\n" "$TOTAL_PROC" "$TOTAL_MEM" "$TOTAL_MEM_GB"


Waarom print ie niet m'n totalen uit??

Als ik
1pgrep -lf "^ora_j"| sort -k2 | while read pid name junk ; do

naar
1
2
3
for i in $(pgrep -lf "^ora_j"| sort -k2|sed -e 's/ /$/') ; do
pid=$(echo $i | cut -d\$ -f1)
name=$(echo $i | cut -d\$ -f2)


Werkt het wel... Why??
In theory there is no difference between theory and practice. In practice there is.
  donderdag 10 september 2009 @ 15:40:11 #48
147503 Iblis
aequat omnis cinis
pi_72614193
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
  donderdag 10 september 2009 @ 15:45:45 #49
65490 whoops
Home is where the heart is...
pi_72614324
quote:
Op donderdag 10 september 2009 14:20 schreef slacker_nl het volgende:

[ code verwijderd ]

Waarom print ie niet m'n totalen uit??

Als ik
[ code verwijderd ]

naar
[ code verwijderd ]

Werkt het wel... Why??
Gebruik dan ook geen bash maar zsh ofzo...
In the beginning, the universe was created. This made a lot of people very angry and has been widely regarded as a bad move.
pi_72614724
@whoops
Spuit 11

@Iblis
Hehehe, held
In theory there is no difference between theory and practice. In practice there is.
pi_72625469
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?
  donderdag 10 september 2009 @ 21:23:37 #52
147503 Iblis
aequat omnis cinis
pi_72625623
quote:
Op donderdag 10 september 2009 21:19 schreef ReWout het volgende:
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?
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.
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
pi_76977573
hoe laat je kleuren zien in de shell dan ?
  maandag 18 januari 2010 @ 19:24:18 #54
147503 Iblis
aequat omnis cinis
pi_76979041
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:

1$ echo -e '\e[0;31m' hoi


Let wel op, daarna blijft alles rood.
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
  dinsdag 2 februari 2010 @ 15:29:20 #55
187069 slacker_nl
Sicko pur sang
pi_77553256
Denk dat iblis deze gaat beantwoorden

1
2
3
4
5
6
7
8
9
cmd_line=$(cat /proc/cmdline)
# Ziet er ongveer zo uit:
# BOOT_IMAGE=/boot/vmlinuz-2.6.32-trunk-686 root=UUID=fcdc06c1-729c-4991-817d-e7f94ce69dc6 ro quiet

# De oplossing in perl:
cmd_line=$(echo $cmd_line | perl -p -e 's#BOOT_IMAGE=\S+##')

# De beetje brakke oplossing met sed.. 
cmd_line=$(echo $cmd_line | sed -e 's#BOOT_IMAGE=.\+ root=#root=#'


Hoe krijg ik net zo'n mooie oplossing met sed als ik heb in perl?

While I was typing:

1
2
3
sed -e 's#BOOT_IMAGE=[[:punct:][:alnum:]]\+ ##'
# of mooier en meer lijkend op het perl ding:
sed -e 's#BOOT_IMAGE=[^[:space:]]\+ ##'


Toch jammer dat sed niet de \S kent zoals perl
In theory there is no difference between theory and practice. In practice there is.
  dinsdag 2 februari 2010 @ 15:42:24 #56
147503 Iblis
aequat omnis cinis
pi_77553882
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.
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
  dinsdag 2 februari 2010 @ 15:47:18 #57
126003 Daniel1976
de omnibus dubitandum
pi_77554099
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.
pi_78601405
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.
  maandag 1 maart 2010 @ 18:55:05 #59
147503 Iblis
aequat omnis cinis
pi_78601863
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:

1
2
3
for i in  do
   commando $i $i.out
done;


* 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:


1
2
3
for i in File*jpg; do
   touch "$i"
done;


Hier een voorbeeld om b.v. thumbnails te maken:


1
2
3
for i in File*jpg; do
   convert "$i" -resize 20% th_"$i".jpg
done;


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.:

1
2
3
for i in File*jpg; do
   echo convert "$i" -resize 20% th_"$i".jpg
done;


En je kunt in de shell ook de boel op 1 regel typen als je wilt:

1for i in File*jpg; do touch "$i"; done;
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
pi_78607693
Super, thanks! Ik neem aan dat in je eerste voorbeeld je for i in * bedoelt? Er staat namelijk for i in alleen.
  maandag 1 maart 2010 @ 20:39:39 #61
147503 Iblis
aequat omnis cinis
pi_78607909
quote:
Op maandag 1 maart 2010 20:35 schreef SinofEnvy het volgende:
Super, thanks! Ik neem aan dat in je eerste voorbeeld je for i in * bedoelt? Er staat namelijk for i in alleen.
Oh ja. Foutje. Foutje van FOK! zelfs, er staat wel *; in de source, maar dat verdwijnt in een code omgeving.
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
pi_78713775
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!
Sea Shepherd
Virtus omnia vincit
  donderdag 4 maart 2010 @ 00:23:41 #63
147503 Iblis
aequat omnis cinis
pi_78714086
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.
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
pi_78714319
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!
Sea Shepherd
Virtus omnia vincit
  donderdag 4 maart 2010 @ 00:43:42 #65
147503 Iblis
aequat omnis cinis
pi_78714780
quote:
Op donderdag 4 maart 2010 00:30 schreef -Mzraki- het volgende:
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!
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:

1
2
3
4
5
6
7
8
9
10
#include <unistd.h>

int main(void) {
   ...
   while(!done) {
     print_rooster();
     sleep(1); //1 seconde
               //of b.v.:
     usleep(500000); // 500000 microseconden
   }
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
pi_78715053
Ohja, das in ieder geval wel een makkelijke methode om het snel wat beter te maken, thx
Sea Shepherd
Virtus omnia vincit
pi_90099179
Vraagje

Iemand enig idee hoe ik via shell het aantal bestanden tel wat zich in een ftp map bevindt (ben dus met ftp verbonden)?
  zaterdag 18 december 2010 @ 21:44:11 #68
29444 RemcoDelft
4 8 15 16 23 42
pi_90099416
quote:
1s.gif Op zaterdag 18 december 2010 21:38 schreef Dale. het volgende:
Vraagje

Iemand enig idee hoe ik via shell het aantal bestanden tel wat zich in een ftp map bevindt (ben dus met ftp verbonden)?
Zelfs als je een getal terugkrijgt: wat wil je dat je ftp-client daarmee doet?
Heb je geen ssh-toegang, dat maakt het eenvoudiger.
censuur :O
pi_90099715
quote:
1s.gif Op zaterdag 18 december 2010 21:44 schreef RemcoDelft het volgende:

[..]

Zelfs als je een getal terugkrijgt: wat wil je dat je ftp-client daarmee doet?
Heb je geen ssh-toegang, dat maakt het eenvoudiger.
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
  zondag 19 december 2010 @ 03:37:32 #70
187069 slacker_nl
Sicko pur sang
pi_90112201
1rename -n 's/(Bestand)(\d+)/$1Wii$2/' Bestand*.jpg

Als je tevreden bent, -n weghalen en done :)
Je kan het ook met een for-loop doen, maar rename commando is handy :)
In theory there is no difference between theory and practice. In practice there is.
pi_90123034
quote:
1s.gif Op zondag 19 december 2010 03:37 schreef slacker_nl het volgende:

[ code verwijderd ]

Als je tevreden bent, -n weghalen en done :)
Je kan het ook met een for-loop doen, maar rename commando is handy :)
Ty :*

Ander vraagje hoe upload ik een hele directoy naar ftp? Kan alleen bestanden verplaatsen maar geen dirs..?
  zondag 19 december 2010 @ 14:32:49 #72
136730 PiRANiA
All thinking men are atheists.
pi_90123276
quote:
1s.gif Op zondag 19 december 2010 14:27 schreef Dale. het volgende:

[..]

Ty :*

Ander vraagje hoe upload ik een hele directoy naar ftp? Kan alleen bestanden verplaatsen maar geen dirs..?
Google even op lftp (mirror)
pi_90124362
quote:
1s.gif Op zondag 19 december 2010 14:32 schreef PiRANiA het volgende:

[..]

Google even op lftp (mirror)
Ty :* vraagje aan Slacker nog

1rename -n 's/(Bestand)(\d+)/$1Wii$2/' Bestand*.jpg

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?
  zondag 19 december 2010 @ 15:33:19 #74
187069 slacker_nl
Sicko pur sang
pi_90126107
quote:
1s.gif Op zondag 19 december 2010 14:56 schreef Dale. het volgende:

[..]

Ty :* vraagje aan Slacker nog

[ code verwijderd ]

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?
Het is gewoon een perl regexp ja, die -n is dat ie laat zien wat ie zou doen, zonder het daadwerkelijk te doen.
In theory there is no difference between theory and practice. In practice there is.
  zondag 19 december 2010 @ 15:48:43 #75
29444 RemcoDelft
4 8 15 16 23 42
pi_90126815
quote:
1s.gif Op zondag 19 december 2010 14:27 schreef Dale. het volgende:

[..]
Ander vraagje hoe upload ik een hele directoy naar ftp? Kan alleen bestanden verplaatsen maar geen dirs..?
Mijn persoonlijke voorkeur is tegenwoordig scp (ssh-toegang vereist):

scp -r /home/user/directory username@example.com:/home/andereusername/subdirectory # :)
censuur :O
pi_90129463
quote:
1s.gif Op zondag 19 december 2010 15:33 schreef slacker_nl het volgende:

[..]

Het is gewoon een perl regexp ja, die -n is dat ie laat zien wat ie zou doen, zonder het daadwerkelijk te doen.
Hmmm die -n flag doet het volgens mij niet bij me :?

1
2
3
4
-rw-r--r--   1 admin    administrators  5693125 Dec 19 16:36 Morningwood - Nth Degree.mp3
226 Transfer complete
ftp> rename -n "Morningwood - Nth Degree.mp3" "test.mp3"
550 -n: No such file or directory
  zondag 19 december 2010 @ 17:40:39 #77
187069 slacker_nl
Sicko pur sang
pi_90131811
dat werkt niet met ftp nee, ssh toegang is wel een vereiste :)
In theory there is no difference between theory and practice. In practice there is.
pi_90135688
quote:
1s.gif Op zondag 19 december 2010 17:40 schreef slacker_nl het volgende:
dat werkt niet met ftp nee, ssh toegang is wel een vereiste :)
ok en hoe krijg ik dat? Vind alleen maar lange manuals :@ waar ik niet veel zin heb om die helemaal door te lezen.
  zondag 19 december 2010 @ 19:18:35 #79
158136 Joooo-pi
Do you want a balloon...
pi_90136594
quote:
1s.gif Op zondag 19 december 2010 18:58 schreef Dale. het volgende:

[..]

ok en hoe krijg ik dat? Vind alleen maar lange manuals :@ waar ik niet veel zin heb om die helemaal door te lezen.
Als je server ssh draait, dan vanuit windows met putty of vanuit linux gewoon vanuit de terminal:

$ ssh inlognaam@ip-van-server
heitieh
pi_90144131
quote:
99s.gif Op zondag 19 december 2010 19:18 schreef Joooo-pi het volgende:

[..]

Als je server ssh draait, dan vanuit windows met putty of vanuit linux gewoon vanuit de terminal:

$ ssh inlognaam@ip-van-server
Ah thanks dat is eenvoudig.
pi_90514839
quote:
1s.gif Op zondag 19 december 2010 15:33 schreef slacker_nl het volgende:

[..]

Het is gewoon een perl regexp ja, die -n is dat ie laat zien wat ie zou doen, zonder het daadwerkelijk te doen.
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.
  maandag 27 december 2010 @ 23:10:32 #82
187069 slacker_nl
Sicko pur sang
pi_90516035
quote:
1s.gif Op maandag 27 december 2010 22:46 schreef Dale. het volgende:

[..]

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.
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.
In theory there is no difference between theory and practice. In practice there is.
pi_90516568
quote:
1s.gif Op maandag 27 december 2010 23:10 schreef slacker_nl het volgende:

[..]

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.
ah ja sorry maar bedoel natuurlijk alle parts iets van 50 ofzo :+ dus dat hij alle .rar's verplaatst, niet enkel 01.
  maandag 27 december 2010 @ 23:23:07 #84
136730 PiRANiA
All thinking men are atheists.
pi_90516619
quote:
1s.gif Op maandag 27 december 2010 23:22 schreef Dale. het volgende:

[..]

ah ja sorry maar bedoel natuurlijk alle parts iets van 50 ofzo :+ dus dat hij alle .rar's verplaatst, niet enkel 01.
mv Home\ Alone.mkv.part*.rar Home\ Alone/

?
pi_91209214
quote:
1s.gif Op zondag 19 december 2010 17:40 schreef slacker_nl het volgende:
dat werkt niet met ftp nee, ssh toegang is wel een vereiste :)
Hmmmm ik heb nu via ssh admin@<ip> ssh geopend alleen wanneer ik de commando rename uitvoer zegt die dat hij die niet kent...
  woensdag 12 januari 2011 @ 14:07:10 #86
73930 Blinker
Only one Go Ahead Eagles
pi_91210331
quote:
1s.gif Op woensdag 12 januari 2011 13:44 schreef Dale. het volgende:

[..]

Hmmmm ik heb nu via ssh admin@<ip> ssh geopend alleen wanneer ik de commando rename uitvoer zegt die dat hij die niet kent...
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/
  woensdag 12 januari 2011 @ 16:21:37 #87
187069 slacker_nl
Sicko pur sang
pi_91216581
quote:
1s.gif Op woensdag 12 januari 2011 14:07 schreef Blinker het volgende:

[..]

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/
pssst
In theory there is no difference between theory and practice. In practice there is.
  woensdag 12 januari 2011 @ 20:37:22 #88
73930 Blinker
Only one Go Ahead Eagles
pi_91230114
quote:
1s.gif Op woensdag 12 januari 2011 16:21 schreef slacker_nl het volgende:

[..]

pssst
Haha, nooit geweten! Moet zeggen dat ik mij altijd goed heb gered met mv :P
pi_91233385
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?
  woensdag 12 januari 2011 @ 22:27:03 #90
187069 slacker_nl
Sicko pur sang
pi_91238928
quote:
1s.gif Op woensdag 12 januari 2011 21:22 schreef Dale. het volgende:
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?
dan doe je echo "mv stuff daar" en dan zie je wat je zou doen :)
In theory there is no difference between theory and practice. In practice there is.
  donderdag 29 september 2011 @ 22:19:19 #91
136730 PiRANiA
All thinking men are atheists.
pi_102531093
Ik ga deze weer eens schoppen. Zonder reden.

Hebben mensen nog interessante scriptjes? :9.
pi_102532945
quote:
14s.gif Op donderdag 29 september 2011 22:19 schreef PiRANiA het volgende:
Hebben mensen nog interessante scriptjes? :9.
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!):
1
2
3
4
5
6
#!/bin/bash
backupdir=/andereharddisk/TimeMachineBackup/`date +%Y_%m_%d_%a_%H:%Mh`
mkdir -p $backupdir; cd $backupdir/..
oudebackupdir=`ls -rt | tail -n 2 | head -n 1`
cp -a /home/userdir/data $backupdir
fdupes -rL $oudebackupdir/data $backupdir/data
censuur :O
pi_102539231
Mijn rmkernel script. Getest op Debian en Ubuntu, maar werkt denk ik ook op andere Debian based systemen.
In theory there is no difference between theory and practice. In practice there is.
  dinsdag 8 mei 2012 @ 11:21:07 #94
44552 Black_Ninja
Ninja's bestaan!
pi_111282142
Via een doorverwijzing even mijn vraag hier posten :)

Hoeveel werk is het om dit commando te laten uitvoeren?

1    VBoxManage startvm "vm" --type headless

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:

1~/run_replication.sh
en
1./run_server.sh

Beide moeten eigenlijk worden gecontroleerd of ze runnen 1x per uur ofzo en daarnaast moet ie 1x per dag
1sudo shutdown now
uitvoeren zodat hij de gegevens van die dag opslaat en dan via dat controle scriptje op de echte machine binnen een uurtje weer opstarten :)
Domo Arigato!
  dinsdag 8 mei 2012 @ 11:28:40 #95
187069 slacker_nl
Sicko pur sang
pi_111282443
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.
In theory there is no difference between theory and practice. In practice there is.
  dinsdag 8 mei 2012 @ 11:30:53 #96
44552 Black_Ninja
Ninja's bestaan!
pi_111282538
quote:
0s.gif Op dinsdag 8 mei 2012 11:28 schreef slacker_nl het volgende:
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.
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? :@
Domo Arigato!
  dinsdag 8 mei 2012 @ 11:35:44 #97
187069 slacker_nl
Sicko pur sang
pi_111282741
Je moet het volledige path gebruiken.

Bijvoorbeeld als je aptitude update vanuit de cron gaat draaien krijg je dit:

10 0 * * * /usr/bin/aptitude update &>/dev/null

Als je zelf een script schrijft moet je zorgen dat je PATH in je script gedefinieerd is.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ sudo crontab -l
[snip]
*/5 * * * *  /usr/local/bin/vnstat_all
$ cat /usr/local/bin/vnstat_all
#!/usr/bin/env bash

PATH=/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin

vnstat=/usr/bin/vnstat

[ ! -x $vnstat ] && echo "Unable to run $vnstat" >&2 && exit 1

for int in $(ifconfig | grep "^[^ ]" | awk '{print $1}') ; do
    $vnstat --force -u -i $int
done

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 ]
In theory there is no difference between theory and practice. In practice there is.
  dinsdag 8 mei 2012 @ 11:41:43 #98
44552 Black_Ninja
Ninja's bestaan!
pi_111282981
quote:
0s.gif Op dinsdag 8 mei 2012 11:35 schreef slacker_nl het volgende:
Je moet het volledige path gebruiken.

Bijvoorbeeld als je aptitude update vanuit de cron gaat draaien krijg je dit:
[ code verwijderd ]

Als je zelf een script schrijft moet je zorgen dat je PATH in je script gedefinieerd is.
[ code verwijderd ]

En uiteraard ook je script chmodden :)
Sorry ik probeer zo snel mogelijk alles onder de knie te krijgen maar ik ben nogsteeds een groentje hiermee :@

1/usr/lib/virtualbox/VBoxManage startvm "vm" --type headless
Zou dat voldoende moeten zijn in rc.local?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/usr/local/bin/./lamppstart.sh
/usr/lib/virtualbox/VBoxManage startvm "vm" --type headless

exit 0

:@

Want dit doet hij dus niet :@
Domo Arigato!
  dinsdag 8 mei 2012 @ 11:44:54 #99
187069 slacker_nl
Sicko pur sang
pi_111283131
quote:
0s.gif Op dinsdag 8 mei 2012 11:41 schreef Black_Ninja het volgende:

[..]

Sorry ik probeer zo snel mogelijk alles onder de knie te krijgen maar ik ben nogsteeds een groentje hiermee :@
[ code verwijderd ]

Zou dat voldoende moeten zijn in rc.local?
[ code verwijderd ]

:@

Want dit doet hij dus niet :@
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$ cat /etc/bind/tools/bind.sh 
#!/usr/bin/env bash

start() {
    /etc/init.d/bind9 start
}

stop() {
    pkill -f /usr/sbin/named
}

status() {
   pgrep -lf /usr/sbin/named
}

restart() {
    stop
    sleep 2
    start
}

case $1 in
    start|stop|restart|status) $1;;
    *) echo "Usage: $(basename $0) <start|stop|restart|status>";;
esac
In theory there is no difference between theory and practice. In practice there is.
  dinsdag 8 mei 2012 @ 11:50:08 #100
44552 Black_Ninja
Ninja's bestaan!
pi_111283349
quote:
0s.gif Op dinsdag 8 mei 2012 11:44 schreef slacker_nl het volgende:

[..]

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:
[ code verwijderd ]

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? :@
Domo Arigato!
  dinsdag 8 mei 2012 @ 17:46:46 #101
44552 Black_Ninja
Ninja's bestaan!
pi_111296916
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! :?
Domo Arigato!
  dinsdag 8 mei 2012 @ 18:58:22 #102
136730 PiRANiA
All thinking men are atheists.
pi_111299822
quote:
0s.gif Op dinsdag 8 mei 2012 17:46 schreef Black_Ninja het volgende:
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! :?
Kan aan path en environment vars liggen.
  dinsdag 8 mei 2012 @ 19:25:41 #103
44552 Black_Ninja
Ninja's bestaan!
pi_111301218
quote:
3s.gif Op dinsdag 8 mei 2012 18:58 schreef PiRANiA het volgende:

[..]

Kan aan path en environment vars liggen.
:@ zou je dat een beetje kunnen toelichten? :@
Domo Arigato!
  dinsdag 8 mei 2012 @ 19:29:20 #104
136730 PiRANiA
All thinking men are atheists.
pi_111301411
quote:
0s.gif Op dinsdag 8 mei 2012 19:25 schreef Black_Ninja het volgende:

[..]

:@ zou je dat een beetje kunnen toelichten? :@
Post je script eens ;)
  dinsdag 8 mei 2012 @ 19:29:37 #105
44552 Black_Ninja
Ninja's bestaan!
pi_111301426
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command
@reboot /home/media/startscripje.sh
@hourly /home/media/startscripje.sh

1
2
3
4
#!/bin/bash
clear

/usr/lib/virtualbox/VBoxManage startvm "vm" --type headless

Even mijn codes toegevoegd :@
Domo Arigato!
  dinsdag 8 mei 2012 @ 19:29:50 #106
44552 Black_Ninja
Ninja's bestaan!
pi_111301443
quote:
3s.gif Op dinsdag 8 mei 2012 19:29 schreef PiRANiA het volgende:

[..]

Post je script eens ;)
Was al onderweg :)
Domo Arigato!
  dinsdag 8 mei 2012 @ 19:29:53 #107
45457 NightH4wk
Semper Fi!
pi_111301450
http://www.wonkity.com/~wblock/docs/html/interrupted.html

Nummer 2 van de interrupted Unix FAQ.
  dinsdag 8 mei 2012 @ 19:30:16 #108
45457 NightH4wk
Semper Fi!
pi_111301468
Ah, te laat.
  dinsdag 8 mei 2012 @ 19:33:02 #109
44552 Black_Ninja
Ninja's bestaan!
pi_111301597
quote:
0s.gif Op dinsdag 8 mei 2012 19:29 schreef NightH4wk het volgende:
http://www.wonkity.com/~wblock/docs/html/interrupted.html

Nummer 2 van de interrupted Unix FAQ.
Dat doe ik toch goed? :@
Domo Arigato!
  dinsdag 8 mei 2012 @ 19:33:14 #110
136730 PiRANiA
All thinking men are atheists.
pi_111301612
quote:
0s.gif Op dinsdag 8 mei 2012 19:29 schreef Black_Ninja het volgende:

[ code verwijderd ]

[ code verwijderd ]

Even mijn codes toegevoegd :@
1
2
3
4
5
6
7
$ /usr/lib/virtualbox/VBoxManage list vms
"ZoneCD" {fc21749e-413d-4054-a498-2307ed8c785d}
"Android" {bd77113d-9194-4d8e-a6ee-fb301a2a9ee5}
$ sudo /usr/lib/virtualbox/VBoxManage list vms
$ sudo -u mijnusername /usr/lib/virtualbox/VBoxManage list vms
"ZoneCD" {fc21749e-413d-4054-a498-2307ed8c785d}
"Android" {bd77113d-9194-4d8e-a6ee-fb301a2a9ee5}

Het VBoxManage command hangt dus af van de user. Voer je de cron als root uit?
  dinsdag 8 mei 2012 @ 19:34:32 #111
45457 NightH4wk
Semper Fi!
pi_111301696
quote:
Dat doe ik toch goed?
Idd. Daarom te laat. :X
  dinsdag 8 mei 2012 @ 19:35:32 #112
44552 Black_Ninja
Ninja's bestaan!
pi_111301741
quote:
14s.gif Op dinsdag 8 mei 2012 19:33 schreef PiRANiA het volgende:

[..]
[ code verwijderd ]

Het VBoxManage command hangt dus af van de user. Voer je de cron als root uit?
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? :@
Domo Arigato!
  dinsdag 8 mei 2012 @ 19:35:46 #113
44552 Black_Ninja
Ninja's bestaan!
pi_111301765
quote:
0s.gif Op dinsdag 8 mei 2012 19:34 schreef NightH4wk het volgende:

[..]

Idd. Daarom te laat. :X
Gelukkig :) Doe ik iedergeval iets goed :P
Domo Arigato!
  dinsdag 8 mei 2012 @ 19:52:04 #114
44552 Black_Ninja
Ninja's bestaan!
pi_111302669
quote:
14s.gif Op dinsdag 8 mei 2012 19:33 schreef PiRANiA het volgende:

[..]
[ code verwijderd ]

Het VBoxManage command hangt dus af van de user. Voer je de cron als root uit?
In cron root werkt het ook niet ;(
Domo Arigato!
  dinsdag 8 mei 2012 @ 20:50:01 #115
187069 slacker_nl
Sicko pur sang
pi_111306092
su - $user -c "/path/to/cmd" of is het -e?!
In theory there is no difference between theory and practice. In practice there is.
  dinsdag 8 mei 2012 @ 21:15:33 #116
44552 Black_Ninja
Ninja's bestaan!
pi_111307681
*O* *O* *O* *O* *O* *O* *O* *O* *O* *O*
Ik heb de Virtualbox werkende :D

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 -O-

Het script dat ik start met
1~/run_replication.sh
werkt prima

Het script dat ik start met
1./run_server.sh
werkt dus niet ;(

Hoe moet ik het ./ gedeelte in een cronjob zetten? :@
Domo Arigato!
  dinsdag 8 mei 2012 @ 21:41:01 #117
187069 slacker_nl
Sicko pur sang
pi_111309074
Volledige path gebruiken..
In theory there is no difference between theory and practice. In practice there is.
  dinsdag 8 mei 2012 @ 21:53:39 #118
44552 Black_Ninja
Ninja's bestaan!
pi_111309816
quote:
0s.gif Op dinsdag 8 mei 2012 21:41 schreef slacker_nl het volgende:
Volledige path gebruiken..
helpt niet ;(
Domo Arigato!
  dinsdag 8 mei 2012 @ 21:58:26 #119
187069 slacker_nl
Sicko pur sang
pi_111310070
Dan heb ik een pro-tip. set -x gebruiken en dan 2>> /tmp/logfile redirecten :)

Dan krijg je debug info in een log, kek :)
In theory there is no difference between theory and practice. In practice there is.
  dinsdag 8 mei 2012 @ 22:30:07 #120
44552 Black_Ninja
Ninja's bestaan!
pi_111312105
quote:
0s.gif Op dinsdag 8 mei 2012 21:58 schreef slacker_nl het volgende:
Dan heb ik een pro-tip. set -x gebruiken en dan 2>> /tmp/logfile redirecten :)

Dan krijg je debug info in een log, kek :)
log blijft leeg maar wordt wel aangemaakt :?
Domo Arigato!
  dinsdag 8 mei 2012 @ 22:31:46 #121
187069 slacker_nl
Sicko pur sang
pi_111312202
uhh &2>> logfile
In theory there is no difference between theory and practice. In practice there is.
  dinsdag 8 mei 2012 @ 23:11:00 #122
44552 Black_Ninja
Ninja's bestaan!
pi_111314494
Echt, wtf!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command
*/1 * * * * danny -u /home/musicbrainz/run_server.sh
10 * * * * /home/musicbrainz/run_replication.sh >> /tmp/replication.log 2>&1
@reboot /home/musicbrainz/run_replication.sh
46 * * * * /home/musicbrainz/run_server.sh >> /home/musicbrainz/startserver.log

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 :(
Domo Arigato!
  dinsdag 8 mei 2012 @ 23:16:42 #123
187069 slacker_nl
Sicko pur sang
pi_111314784
~/ werkt niet, dan moet je $HOME gebruiken. Volgens mij staat dat ook ergens in deze draad :) Jep: you@shellscripts$ enter() { echo "Shell scripting ftw!, deel 1
In theory there is no difference between theory and practice. In practice there is.
  dinsdag 8 mei 2012 @ 23:21:09 #124
44552 Black_Ninja
Ninja's bestaan!
pi_111315019
quote:
0s.gif Op dinsdag 8 mei 2012 23:16 schreef slacker_nl het volgende:
~/ werkt niet, dan moet je $HOME gebruiken. Volgens mij staat dat ook ergens in deze draad :) Jep: you@shellscripts$ enter() { echo "Shell scripting ftw!, deel 1
run_replication werkt dus, en die moest met ~/ worden gestart

het is run_server.sh dat niet werkt en die werd gestart met ./

:? :? :? :? :? :? :? :? :?
Domo Arigato!
  dinsdag 8 mei 2012 @ 23:23:27 #125
187069 slacker_nl
Sicko pur sang
pi_111315129
DUDE STOP FUCKING WITH RELATIVES PATHS!!!!! ABSOLUTE PATHS PLEASE!!!!!!
In theory there is no difference between theory and practice. In practice there is.
  dinsdag 8 mei 2012 @ 23:25:55 #126
44552 Black_Ninja
Ninja's bestaan!
pi_111315230
quote:
0s.gif Op dinsdag 8 mei 2012 23:23 schreef slacker_nl het volgende:
DUDE STOP FUCKING WITH RELATIVES PATHS!!!!! ABSOLUTE PATHS PLEASE!!!!!!
Die werken dus ook niet! :P

Ik heb als eerste
1/home/musicbrainz/run_server.sh
geprobeerd maar dat deed niks, als ik die handmatig intik werkt het prima.
Domo Arigato!
  dinsdag 8 mei 2012 @ 23:27:20 #127
187069 slacker_nl
Sicko pur sang
pi_111315292
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 ;)
In theory there is no difference between theory and practice. In practice there is.
  dinsdag 8 mei 2012 @ 23:29:15 #128
45457 NightH4wk
Semper Fi!
pi_111315380
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.
  dinsdag 8 mei 2012 @ 23:31:04 #129
44552 Black_Ninja
Ninja's bestaan!
pi_111315461
quote:
0s.gif Op dinsdag 8 mei 2012 23:27 schreef slacker_nl het volgende:
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 ;)
Als ik meer info had zou ik het graag geven :@

quote:
0s.gif Op dinsdag 8 mei 2012 23:29 schreef NightH4wk het volgende:
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.
run_replication.sh staat in dezelfde map als run_server.sh dat is dus allemaal zo vreemd :@
Domo Arigato!
  dinsdag 8 mei 2012 @ 23:38:05 #130
45457 NightH4wk
Semper Fi!
pi_111315796
quote:
run_replication.sh staat in dezelfde map als run_server.sh dat is dus allemaal zo vreemd
Maar wordt het script dus aangeroepen? Indien dat het geval is dat zit het probleem in de .sh.
  dinsdag 8 mei 2012 @ 23:40:09 #131
44552 Black_Ninja
Ninja's bestaan!
pi_111315878
quote:
0s.gif Op dinsdag 8 mei 2012 23:38 schreef NightH4wk het volgende:

[..]

Maar wordt het script dus aangeroepen? Indien dat het geval is dat zit het probleem in de .sh.
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?
Domo Arigato!
  woensdag 9 mei 2012 @ 09:50:37 #132
44552 Black_Ninja
Ninja's bestaan!
pi_111324142
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? :@
Domo Arigato!
  woensdag 9 mei 2012 @ 10:00:22 #133
134103 gebrokenglas
Half human, half coffee
pi_111324383
quote:
0s.gif Op woensdag 9 mei 2012 09:50 schreef Black_Ninja het volgende:
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? :@
Als je een script autonoom wilt draaien, kan dat op 2 manieren


methode 1: nohup

Zoiets:
1
2
3
4
5
cd /tmp/
[ -f nohup.out ] && rm nohup.out
[ -f run_server.sh.log ] && rm run_server.sh.log
nohup /home/musicbrainz/run_server.sh &
mv nohup.out run_server.sh.log
Ouput komt dan in een /tmp/run_server.sh.log file terecht, maar je scherm kun je rustig sluiten.


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:
1
2
3
at 12pm
/home/bla/scriptje.sh
^d
Die ctrl-d is om aan at aan te geven dat je klaar bent met het opvoeren van de commando's.

In jouw geval

1
2
3
at now
/home/musicbrainz/run_server.sh
^d


[ Bericht 0% gewijzigd door gebrokenglas op 10-05-2012 08:17:24 ]
How can I make this topic about me?
  woensdag 9 mei 2012 @ 21:28:59 #134
44552 Black_Ninja
Ninja's bestaan!
pi_111353274
quote:
0s.gif Op woensdag 9 mei 2012 10:00 schreef gebrokenglas het volgende:

[..]

Als je een script autonoom wilt draaien, kan dat op 2 manieren

methode 1: nohup

Zoiets:
[ code verwijderd ]

Ouput komt dan in een /tmp/run_server.sh.log file terecht, maar je scherm kun je rustig sluiten.

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:
[ code verwijderd ]

Die ctrl-d is om aan at aan te geven dat je klaar bent met het opvoeren van de commando's.

In jouw geval
[ code verwijderd ]

_O_ _O_ _O_ _O_ _O_ _O_

Je bent geweldig!!! HET WERKT!!! *O* *O* *O* *O* *O*

_O_ _O_ _O_ _O_ _O_ _O_
Domo Arigato!
pi_111893073
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)
  dinsdag 22 mei 2012 @ 20:36:55 #136
187069 slacker_nl
Sicko pur sang
pi_111893577
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.
In theory there is no difference between theory and practice. In practice there is.
pi_111896393
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...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function mapstylus()
{
    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 "scale = 5; $element00" | bc
    echo -e "scale = 5; $element11" | bc

    #xinput set-prop "Serial Wacom Tablet stylus" --type=float "Coordinate Transformation Matrix" $element00 0 0 0 $element11 0 0 0 1
}

wil het gebruiken om de xinput transformatie matrix aan te passen van mijn stylus.
  dinsdag 22 mei 2012 @ 21:24:06 #138
187069 slacker_nl
Sicko pur sang
pi_111897769
nee, drop ff die output (heb hier geen linux bak dus enzo..)

btw, beetje optimalisatie:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function my_function() {
local output="$(xrandr --current)"

local w=$(echo -e "$output" | grep shizzle1)
local x=$(echo -e "$output" | grep shizzle2) 
local y=$(echo -e "$output" | grep shizzle3)
local z =$(echo -e "$output" | grep shizzle4)

local iets=$(echo "scale = 4; $x + $w | bc)
local anders=$(echo "scale 4; $y + $z" | bc )

xinput set-prop "Serial Wacom Tablet stylus" --type=float "Coordinate Transformation Matrix" $iets 0 0 0 $anders 0 0 0 1

}


[ Bericht 0% gewijzigd door slacker_nl op 22-05-2012 21:30:43 ]
In theory there is no difference between theory and practice. In practice there is.
pi_120237695
Is er hier nog leven? Ik kan wel wat hulp gebruiken hehe.
Aim at perfection in everything, though in most things it is unattainable. However, they who aim at it, and persevere, will come much nearer to it than those whose laziness and despondency make them give it up as unattainable.
  woensdag 12 december 2012 @ 18:33:52 #140
187069 slacker_nl
Sicko pur sang
pi_120237863
quote:
0s.gif Op woensdag 12 december 2012 18:28 schreef relativity het volgende:
Is er hier nog leven? Ik kan wel wat hulp gebruiken hehe.
Stel je vraag
In theory there is no difference between theory and practice. In practice there is.
pi_120238266
Hallo :W.
జ్ఞ‌ా
  woensdag 12 december 2012 @ 20:56:00 #142
65490 whoops
Home is where the heart is...
pi_120243993
    ​                  
In the beginning, the universe was created. This made a lot of people very angry and has been widely regarded as a bad move.
pi_120262677
pi_120277024
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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#!/bin/bash

IFS=$'\n'           #changing IFS to newline means spaces
                    #are ignored during word-breaking

DIR=${1:-/home/mainstream/Music/rename}
TYPE='.mp3'
shopt -s extglob    #enable extended globbing

for file in $DIR/*$TYPE ; do

     filepath=${file%/*}
     newname=${file##*/}
     mp3=${file##*/}

     #remove junk characters from filename
     newname=${newname//+([,\'])/}

     regex='_\(final\)|\ \(CDQ\)|\ \(NoShout\)|\ \(CDQ \& Final\)|\ \(Dirty\)|\ \(Mastered\)|\ \(full\)'
     newname=${newname//+($regex)/}

     #replace delimiter
     regex='\ \-\ |\_\-\_|\-\-'
     newname=${newname//+($regex)/-}

     regex='_featuring_\|_feat_\|_f._\|_ft_|_feat._'
     newname=${newname//+($regex)/_ft._}

     regex='\(feat._|\(feat_'
     newname=${newname//+($regex)/\(ft._}

     #replace all instances
     newname=${newname//+(_and_)/_&_}

     #change spaces (and tabs) to underscores in filename
     #extglob reduces multiple spaces to single underscore
     newname=${newname//+([[:space:]])/_}

     #lowercase filename
     newname=${newname,,}

     #remove all initial "digit+[-_]" combinations
     #again extglob handles variable numbers of digits
     newname=${newname#+([0-9])[_-]}

     #remove any final group "-zzzz" strings
     #similar to the last operation
     #assumes the file ends in ".mp3", however
     regex='zzzz|mst|alki|you|wus|htf|whoa'
     newname=${newname/-+($regex).mp3/.mp3}

     #remove any "-(nnn_bpm)" strings
     #remember, spaces have been changed to underscores already
     newname=${newname/-(+([0-9])_bpm)}

     if [[ $mp3 != $newname ]]
     then
          echo \.-------------------------------------------------------------\.
          echo "Old: \"$mp3\""
          echo "New: \"$newname\""
          mv $DIR/$mp3 $DIR/$newname
          echo \'-------------------------------------------------------------\'
     fi

done
exit 0

Tweede stap:
Nu ben ik ook bezig om er iets dergelijks in te bouwen zoals dit:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash
DIR=${1:-/home/mainstream/Music/rename}

read -e -p "Enter Year: " -i "2012" YEAR
echo "Select a Genre"
select GENRE in "Classical" "Dubstep" "Hip-Hop" "Skip"; do
    case $GENRE in
        Classical ) echo $GENRE; break;;
        Dubstep ) echo $GENRE; break;;
        Hip-Hop ) echo $GENRE; break;;
        Rap ) echo $GENRE; break;;
        Skip ) exit;;

    esac
done

id3v2 -D $DIR/$DIR &> /dev/null
id3v2 -g $GENRE -y $YEAR $DIR/$DIR &> /dev/nul
En misschien automatisch ook de artist+song tags (ID3V1 & V2) toewijzen.

Hoe krijg ik dit in een script verwerkt? :P

Bij voorbaat dank O-)
Aim at perfection in everything, though in most things it is unattainable. However, they who aim at it, and persevere, will come much nearer to it than those whose laziness and despondency make them give it up as unattainable.
pi_120279883
quote:
0s.gif Op donderdag 13 december 2012 18:55 schreef relativity het volgende:
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:
[ code verwijderd ]

Tweede stap:
Nu ben ik ook bezig om er iets dergelijks in te bouwen zoals dit:
[ code verwijderd ]

En misschien automatisch ook de artist+song tags (ID3V1 & V2) toewijzen.

Hoe krijg ik dit in een script verwerkt? :P

Bij voorbaat dank O-)
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.

1for file in $(find $DIR -name \*$TYPE); do

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

1
2
3
for file in $(find $DIR -name \*$TYPE | head -10); do
   my_rename_func "$file"
done

Je zou daarna de mp3tags kunnen aanpassen in dezelfde loop, de nieuwe filename return je dan in je my_rename_func

1
2
3
4
5
6
7
8
9
function my_rename_func() {
    # while bunch of code
    echo $new_name
}

for file in $(find $DIR -name \*$TYPE | head -10); do
   new_file=$(my_rename_func "$file")
   tag_the_stuff $new_file
done

En de functie tag the stuff doe je al het spul wat je leuk om te mee te taggen.
In theory there is no difference between theory and practice. In practice there is.
pi_120280778
quote:
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.
Nee alles staat gewoon in een dir; lekker makkelijk.

1
2
3
<?php
Verder kan je met basename en dirname werken 
(dat $filepath gedeelte)
?>
Oke :)

quote:
Een andere tip is om dat hele rename gebeuren in een functie te frotten,
Oke, nog nooit gedaan, maar ga ik eens proberen :D

quote:
je kan dan met een subset dingen testen
[ code verwijderd ]
Ga ik proberen :D

quote:
Je zou daarna de mp3tags kunnen aanpassen in dezelfde loop, de nieuwe filename return je dan in je my_rename_func
[ code verwijderd ]
Hier raak je mij een beetje kwijt haha!
Bedoel je tag_the_stuff als functie aanmaken en dan callen in die loop?

quote:
En de functie tag the stuff doe je al het spul wat je leuk om te mee te taggen.
Krijg hoofdpijn van die loops lol.

Maar goed. Bedankt voor de constructieve feedback. Kan ik morgen even verder gaan :D
Aim at perfection in everything, though in most things it is unattainable. However, they who aim at it, and persevere, will come much nearer to it than those whose laziness and despondency make them give it up as unattainable.
pi_120280864
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#!/bin/bash
set -vx

IFS=$'\n'           #changing IFS to newline means spaces
                    #are ignored during word-breaking

DIR=${1:-/home/mainstream/Music/rename}
TYPE='.mp3'
shopt -s extglob    #enable extended globbing

function my_rename_func() {

     #break input filename into path and name
     #so that names with paths included are correctly handled
     filepath=${file%/*}
     newname=${file##*/}
     mp3=${file##*/}

     #remove junk characters from filename
     newname=${newname//+([,\'])/}

     regex='_\(final\)|\ \(CDQ\)|\ \(NoShout\)|\ \(CDQ \& Final\)|\ \(Dirty\)|\ \(Mastered\)|\ \(full\)'
     newname=${newname//+($regex)/}

     #replace delimiter
     regex='\ \-\ |\_\-\_|\-\-'
     newname=${newname//+($regex)/-}

     regex='_featuring_\|_feat_\|_f._\|_ft_|_feat._'
     newname=${newname//+($regex)/_ft._}

     regex='\(feat._|\(feat_'
     newname=${newname//+($regex)/\(ft._}

     #replace all instances
     newname=${newname//+(_and_)/_&_}

     #change spaces (and tabs) to underscores in filename
     #extglob reduces multiple spaces to single underscore
     newname=${newname//+([[:space:]])/_}

     #lowercase filename
     newname=${newname,,}

     #remove all initial "digit+[-_]" combinations
     #again extglob handles variable numbers of digits
     newname=${newname#+([0-9])[_-]}

     #remove any final "-zzzz" strings
     #similar to the last operation
     #assumes the file ends in ".mp3", however
     regex='zzzz|mst|alki|you|wus|htf|whoa'
     newname=${newname/-+($regex).mp3/.mp3}

     #remove any "-(nnn_bpm)" strings
     #remember, spaces have been changed to underscores already
     newname=${newname/-(+([0-9])_bpm)}

     #you can continue adding as many changes as you want here.

     #call mv to change the filename.
     #I used -iv to make it interactive and verbose, but that's up to you.
     if [[ $mp3 != $newname ]]
     then
          echo \.-------------------------------------------------------------\.
          echo "Old: \"$mp3\""
          echo "New: \"$newname\""
          #mv $DIR/$mp3 $DIR/$newname
          echo \'-------------------------------------------------------------\'
     fi
}

tag_the_stuff() {

read -e -p "Enter Year: " -i "2012" YEAR
echo "Select a Genre"
select GENRE in "Classical" "Dubstep" "Hip-Hop" "Skip"; do
    case $GENRE in
        Classical ) echo $GENRE; break;;
        Dubstep ) echo $GENRE; break;;
        Hip-Hop ) echo $GENRE; break;;
        Rap ) echo $GENRE; break;;
        Skip ) exit;;

    esac
done

id3v2 -D $DIR &> /dev/null
id3v2 -g $GENRE -y $YEAR $DIR &> /dev/nul
}

for file in $(find $DIR -name \*$TYPE | head -10); do
   new_file=$(my_rename_func "$file")
   tag_the_stuff $new_file
done

exit 0


[ Bericht 47% gewijzigd door relativity op 13-12-2012 20:36:18 ]
Aim at perfection in everything, though in most things it is unattainable. However, they who aim at it, and persevere, will come much nearer to it than those whose laziness and despondency make them give it up as unattainable.
  donderdag 13 december 2012 @ 20:49:00 #148
29444 RemcoDelft
4 8 15 16 23 42
pi_120282169
quote:
0s.gif Op donderdag 13 december 2012 20:21 schreef relativity het volgende:
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.
vi/vim/elvis o.i.d. gebruiken? 't Is even wennen, maar daarna wil je niets anders meer!
censuur :O
pi_120282281
quote:
0s.gif Op donderdag 13 december 2012 20:49 schreef RemcoDelft het volgende:

[..]

vi/vim/elvis o.i.d. gebruiken? 't Is even wennen, maar daarna wil je niets anders meer!
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 :P

Ahh vim is grapical :D

[ Bericht 11% gewijzigd door relativity op 13-12-2012 21:10:20 ]
Aim at perfection in everything, though in most things it is unattainable. However, they who aim at it, and persevere, will come much nearer to it than those whose laziness and despondency make them give it up as unattainable.
  donderdag 13 december 2012 @ 21:11:37 #150
29444 RemcoDelft
4 8 15 16 23 42
pi_120283218
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.
censuur :O
pi_120283387
quote:
0s.gif Op donderdag 13 december 2012 21:11 schreef RemcoDelft het volgende:
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.
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.
Aim at perfection in everything, though in most things it is unattainable. However, they who aim at it, and persevere, will come much nearer to it than those whose laziness and despondency make them give it up as unattainable.
pi_121298540
ok ik ben een beetje nieuw met shell scripting, en ik krijg een foutmelding die ik niet helemaal begrijp:
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/sh
host_up=
while [ 1 ]; do
        new_host_up=`iw dev wlan0 station dump | grep -c **.**.**.**.**.**`
        if [ $new_hosts_up -ne $host_up ]; then
                echo $new_host_up
                host_up=$new_host_up
        else
                echo 'nothing to do'
        fi
        sleep 5
done
scriptje geeft de volgende output:
1
2
3
4
5
6
7
8
1
[5 seconden later]
sh: 1: unknown operand
nothing to do
[5 seconden later]
sh: 1: unknown operand
nothing to do
enz.

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).
pi_121299671
Hmm, zet eens " om de vars in de if. Dus "$new_hosts_up" -ne "$host_up".
pi_121301354
while true? of while sleep 5?
జ్ఞ‌ా
pi_121303875
quote:
1s.gif Op dinsdag 8 januari 2013 08:49 schreef µ het volgende:
while true? of while sleep 5?
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.
pi_121303960
True inderdaad (post kwam van mobiel). Kijk ook even of je host_up= wil definieren als host_up=0. Wellicht helpt dat. :s).
జ్ఞ‌ా
pi_121311423
Het waren de aanhalingstekens van NightH4wk :)
pi_121328111
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.
pi_121329146
Voor de brainiacs onder ons, iemand een verklaring voor het volgende verschijnsel?

1
2
3
4
5
6
7
8
9
10
[root@server1 ~]# ksh
# /bin/false;echo $?
1
# /bin/false;echo $?
1
# echo foo | grep $(echo foo | grep foo)
foo
# /bin/false;echo $?
0

Vooralsnog alleen voor elkaar gekregen op virtuele machines met RHEL/CentOS 5.8...
PSN: Cidolfas - FFXIV: Cidolfas Windu
pi_121329302
php op de router geinstalleerd en het is in 5 minuten gepiept :')
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/php-cli
<?php
$hostonline 
0;
while (
true) {
        
$new_hostonline exec("iw dev wlan0 station dump | grep -c **.**.**.**.**.**");
        if (
$hostonline != $new_hostonline) {
                echo 
$new_hostonline;
                
$hostonline $new_hostonline;
        }
        
sleep(5);
}
  dinsdag 8 januari 2013 @ 21:32:50 #161
29444 RemcoDelft
4 8 15 16 23 42
pi_121329708
quote:
18s.gif Op dinsdag 8 januari 2013 21:04 schreef KomtTijd... het volgende:
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.
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.
censuur :O
pi_121330837
quote:
0s.gif Op dinsdag 8 januari 2013 21:32 schreef RemcoDelft het volgende:

[..]

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.
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.
SPOILER
Om spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.


[ Bericht 24% gewijzigd door KomtTijd... op 08-01-2013 21:59:08 ]
  dinsdag 8 januari 2013 @ 22:01:49 #163
187069 slacker_nl
Sicko pur sang
pi_121331347
quote:
0s.gif Op dinsdag 8 januari 2013 21:23 schreef Cid het volgende:
Voor de brainiacs onder ons, iemand een verklaring voor het volgende verschijnsel?
[ code verwijderd ]

Vooralsnog alleen voor elkaar gekregen op virtuele machines met RHEL/CentOS 5.8...
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.
In theory there is no difference between theory and practice. In practice there is.
  dinsdag 8 januari 2013 @ 22:05:04 #164
187069 slacker_nl
Sicko pur sang
pi_121331535
quote:
0s.gif Op dinsdag 8 januari 2013 21:32 schreef RemcoDelft het volgende:

[..]

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.
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.
In theory there is no difference between theory and practice. In practice there is.
pi_121334785
quote:
0s.gif Op dinsdag 8 januari 2013 22:05 schreef slacker_nl het volgende:

[..]

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.
dash?
జ్ఞ‌ా
pi_121335561
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.
  woensdag 9 januari 2013 @ 06:41:42 #168
187069 slacker_nl
Sicko pur sang
pi_121341005
quote:
14s.gif Op dinsdag 8 januari 2013 23:08 schreef µ het volgende:

[..]

dash?
1
2
3
4
5
6
Description: POSIX-compliant shell
 The Debian Almquist Shell (dash) is a POSIX-compliant shell derived from ash. 
 
 Since it executes scripts faster than bash, and has fewer library dependencies (making it more robust against software or
 hardware failures), it is used as the default system shell on Debian systems.
Homepage: http://gondor.apana.org.au/~herbert/dash/
In theory there is no difference between theory and practice. In practice there is.
  woensdag 9 januari 2013 @ 07:07:33 #169
187069 slacker_nl
Sicko pur sang
pi_121341092
quote:
0s.gif Op dinsdag 8 januari 2013 23:26 schreef NightH4wk het volgende:
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.
Welke systemen draaien nog de native bourne shell? Dat zijn er vrij weinig volgens mij.
In theory there is no difference between theory and practice. In practice there is.
pi_121342121
quote:
0s.gif Op dinsdag 8 januari 2013 22:01 schreef slacker_nl het volgende:

[..]

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.

De nested pipe in de command substitution veroorzaakt dat de returncodes niet meer kloppen. Bugreportje aangemaakt..
PSN: Cidolfas - FFXIV: Cidolfas Windu
pi_121351229
quote:
0s.gif Op woensdag 9 januari 2013 07:07 schreef slacker_nl het volgende:

[..]

Welke systemen draaien nog de native bourne shell? Dat zijn er vrij weinig volgens mij.
De BSDs en Android?
pi_123245567
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.
pi_123245786
Maak een hash van elke picca en delete de dubbelen? Zijn scripts voor te vinden.
pi_123245946
Ja heb net deze gevonden die alles checkt;

1find -not -empty -type f -printf "%s\n" | sort -rn | uniq -d | xargs -I{} -n1 find -type f -size {}c -print0 | xargs -0 md5sum | sort | uniq -w32 --all-repeated=separate

En deze die alle dubbele delete
1find -not -empty -type f -printf "%s\n" | sort -rn | uniq -d |  xargs -I{} -n1 find -type f -size {}c -print0 | xargs -0 md5sum | sort | uniq -w32 --all-repeated=separate | cut -f3-100 -d ' ' | tr '\n.' '\t.' | sed 's/\t\t/\n/g' | cut -f2-100 | tr '\t' '\n' | perl -i -pe 's/([ (){}-])/\\$1/g' | perl -i -pe 's/'\''/\\'\''/g' | xargs -pr rm -v

Nu even kijken hoe ik deze recursief kan maken :P
pi_123246127
quote:
7s.gif Op zaterdag 23 februari 2013 17:34 schreef Dale. het volgende:
Ja heb net deze gevonden die alles checkt;
[ code verwijderd ]

En deze die alle dubbele delete
[ code verwijderd ]

Nu even kijken hoe ik deze recursief kan maken :P
Volgens mij doet je find command dat al automatisch als ik het goed heb.
Aim at perfection in everything, though in most things it is unattainable. However, they who aim at it, and persevere, will come much nearer to it than those whose laziness and despondency make them give it up as unattainable.
pi_123249788
quote:
7s.gif Op zaterdag 23 februari 2013 17:22 schreef Dale. het volgende:
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.
fdupes ;).
జ్ఞ‌ా
pi_123249840
$ fdupes --recursive --noempty /pad/naar/directory

geeft bloedjesnel alle overeenkomende bestanden. Hij zoekt eerst recursief alles, vergelijkt daarna op grootte en daarna op hash.
జ్ఞ‌ా
  zaterdag 23 februari 2013 @ 23:07:00 #178
29444 RemcoDelft
4 8 15 16 23 42
pi_123259302
fdupes is inderdaad fantastisch spul! Voor ik dat vond had ik zelf zoiets in elkaar gescript... fdupes is veel beter.
censuur :O
pi_123260424
quote:
0s.gif Op zaterdag 23 februari 2013 23:07 schreef RemcoDelft het volgende:
fdupes is inderdaad fantastisch spul! Voor ik dat vond had ik zelf zoiets in elkaar gescript... fdupes is veel beter.
heb er inderdaad een mooi script voor weggegooid :P
జ్ఞ‌ా
pi_123519456
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).

1
2
3
4
5
6
7
8
9
10
11
 if [ $APPLICATIONSTATUS -ne 0 ]; then
  case $APPLICATION in
   sabnzbd) 
            /usr/bin/sabnzbdplus -d
            ;;
   SickBeard*)
            /usr/bin/python /home/mainstream/SickBeard/SickBeard.py
            ;;
   AutoSub*)
            /usr/bin/python /home/mainstream/SickBeard/auto-sub/AutoSub.py
            ;;

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 :)
Aim at perfection in everything, though in most things it is unattainable. However, they who aim at it, and persevere, will come much nearer to it than those whose laziness and despondency make them give it up as unattainable.
  vrijdag 1 maart 2013 @ 22:22:14 #181
332574 µ
alt-m
pi_123519573
quote:
0s.gif Op vrijdag 1 maart 2013 22:19 schreef relativity het volgende:
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).
[ code verwijderd ]

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 :)
Ik doe het zo:
1
2
3
4
pgrep fbpanel || fbpanel&
pgrep RetroShare || RetroShare&
pgrep redshift || redshift -l 52.130:4.659&
pgrep opera || /usr/bin/opera&
Voor elke regel geldt: als het programma niet draait wordt het opgestart :s).
జ్ఞ‌ా
pi_123591503
quote:
14s.gif Op vrijdag 1 maart 2013 22:22 schreef µ het volgende:

[..]

Ik doe het zo:
[ code verwijderd ]

Voor elke regel geldt: als het programma niet draait wordt het opgestart :s).
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.
Aim at perfection in everything, though in most things it is unattainable. However, they who aim at it, and persevere, will come much nearer to it than those whose laziness and despondency make them give it up as unattainable.
pi_124349832
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?
  donderdag 21 maart 2013 @ 21:06:33 #184
187069 slacker_nl
Sicko pur sang
pi_124350855
quote:
7s.gif Op donderdag 21 maart 2013 20:48 schreef Dale. het volgende:
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?
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.
In theory there is no difference between theory and practice. In practice there is.
pi_124350893
quote:
0s.gif Op donderdag 21 maart 2013 21:06 schreef slacker_nl het volgende:

[..]

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.
Super! Ga even proberen dan :)
  donderdag 21 maart 2013 @ 21:12:33 #186
187069 slacker_nl
Sicko pur sang
pi_124351183
quote:
7s.gif Op donderdag 21 maart 2013 21:07 schreef Dale. het volgende:

[..]

Super! Ga even proberen dan :)
Moet lukken, ik heb het net getest :P
In theory there is no difference between theory and practice. In practice there is.
pi_124351305
quote:
0s.gif Op donderdag 21 maart 2013 21:12 schreef slacker_nl het volgende:

[..]

Moet lukken, ik heb het net getest :P
pi_128834295
1
2
3
4
5
6
running=$(mysql -u ******** -p******** -e SHOW SLAVE STATUS\G" | /bin/grep "Slave_SQL_Running: ")
if [${running} == "Slave_SQL_Running: Yes"]; then
    /usr/bin/zenity --warning --text="Replication is running\n${running}" --display=:0.0
else
    /usr/bin/zenity --warning --text="Replication is NOT running\n${running}" --display=:0.0
fi
ik krijg constant de melding:
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 ]
  donderdag 11 juli 2013 @ 18:39:29 #189
187069 slacker_nl
Sicko pur sang
pi_128843163
quote:
14s.gif Op donderdag 11 juli 2013 14:14 schreef KomtTijd... het volgende:

[ code verwijderd ]

ik krijg constant de melding:
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.
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:

1
2
3
4
5
6
echo bla | grep -q bla 
if [ $? -eq 0 ] ; then
   echo "bla found"
else
   echo "bla was not found"
fi
In theory there is no difference between theory and practice. In practice there is.
pi_128844030
omdat 3 woorden: quick and dirty.

maar die tip ga ik er morgen toch wel even in verwerken denk ik
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')