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