BASH, why is so F***king difficult
Manolis Kiagias
sonicy at otenet.gr
Mon Nov 12 21:50:07 EET 2007
Spiros Georgaras wrote:
> On Monday 12 November 2007 Harris Kosmidhs wrote:
>
>> Πάντα με παίδευε το bash. Αλλά τώρα έχω μπροστά μου και manual και πάλι
>> δε βγάζω άκρη...
>>
>> Έχω σε ένα φάκελο τους παρακάτω φακέλους:
>> Cocteau Twins__Milk_and_kisses
>> Muse-Black.Holes.and.Revelations
>> Nick_Cave__The First Born Is Dead
>> PinkFloyd__Momentary_lapse_of_reason
>> PorcupineTree__Yellow_Hedgerow_Dreamscape
>> Radiohead__In_rainbows
>> RichardWright__Wet_dream
>> Tuxedomoon__Divine
>>
>> Και το εξής script:
>>
>> #!/bin/bash
>>
>> until [ -z "$1" ]
>> do
>> dir="$1 "
>> #chmod 755 $dir
>> if [ -x ${dir} ];then
>> echo $dir
>> fi
>>
>> shift
>> done
>>
>> Το τρέχω και μου βγάζει:
>> hkosmidi at desktop:~/mp3$ ./convert.sh *
>> ./convert.sh: line 7: [: Cocteau: binary operator expected
>> convert.sh
>> convert.sh~
>> Muse-Black.Holes.and.Revelations
>> ./convert.sh: line 7: [: too many arguments
>> PinkFloyd__Momentary_lapse_of_reason
>> PorcupineTree__Yellow_Hedgerow_Dreamscape
>> Radiohead__In_rainbows
>> RichardWright__Wet_dream
>> Tuxedomoon__Divine
>>
>> Γιατί; Το dir το όρισα με τα κενά μέσα κάνοντας quoting με "".
>> Αν κάνω if [ -x "${dir}" ];then τότε δεν τυπώνεται τίποτε.
>>
>> Τι στο καλό φταίει; Γιατί είναι τόσο δύσκολο να διαχειριστεί το bash τα
>> κενά στα filenames;
>>
>> ευχαριστώ...
>>
>
> Για δοκίμασέ το έτσι:
>
> #!/bin/bash
>
> until [ -z "$1" ]
> do
> dir="$1"
> #chmod 755 $dir
> if [ -x "$dir" ];then
> echo "$dir"
> fi
> shift
> done
>
>
> ------------------------------------------------------------------------
>
>
(Γεια σου ρε Σπύρο, σου έμεινε τελικά το programming από τις πράσινες
CGA/hercules του ΤΕΙ μέχρι σήμερα...)
Στο θέμα μας, μπορείς να βάλεις κάτω από το #:
IFS=$'\n'
ώστε να μη χωρίζονται τα ονόματα αρχείων στα κενά αλλά στις αλλαγές γραμμών.
Επίσης για λόγους γενικότητας (και πριν με προλάβει ο Γιώργος :) ) αντί για
#! /bin/bash
βάλε:
#! /usr/bin/env bash
για την περίπτωση που το bash δεν είναι στο bin
Άντε πάλι γεμίσαμε $$ βραδιάτικα :) Αλλά όχι στις τσέπες...
More information about the Linux-greek-users
mailing list