<?PHP:
#!/bin/sh
cd dirA
for file in `ls -1`
do
rm -f $file
ln -s ../dirB/$file $file
done
Το switch της ls είναι -1 (μείον ένα), όχι -l (μείον ελ). Επίσης, γύρω από την ls -1 ο χαρακτήρας δεν είναι μονό quote αλλά backtick (πάνω απ'το Tab συνήθως). Στα κενά υπάρχει πρόβλημα, όντως. Για να δούμε αν κάποιος σκεφτεί τρόπο.
Disclaimer: Είμαι σε Windows τώρα και το script δοκιμάστηκε σε Bash for Windows + UnxUtils (η ln μπήκε σε σχόλιο γιατί πετάει μήνυμα λάθους). Δε βλέπω το λόγο όμως να μη δουλέψει όπως πρέπει σε Linux...
EDIT: Το παρακάτω πρέπει να δουλεύει, δοκιμάστηκε σε Linux με επιτυχία. Το πρόβλημα της for...in είναι ότι όταν δει χαρακτήρα space, το αλφαριθμητικό που ακολουθεί μετατίθεται στην επόμενη εκτέλεση του βρόχου. Οπότε, η while read... με pipe ήταν μονόδρομος.
<?PHP:
#!/bin/sh
cd dirA
ls -1 | while read file
do
rm -f "$file"
ln -s ../dirB/"$file" "$file"
done
Εμφάνιση 46-60 από 2232
Θέμα: Ερώτηση για bash
-
15-09-07, 22:01 Απάντηση: Ερώτηση για bash #46
Τελευταία επεξεργασία από το μέλος parsifal : 15-09-07 στις 23:13.
-
15-09-07, 23:28 Απάντηση: Ερώτηση για bash #47
Μάλιστα ευχαριστώ.
Θα το δοκιμάσω.
Είχα μάθει παλαιότερα την if του bash, τώρα μαθαίνω και τις for και while. Ωραία.Επιτέλους το ελάχιστο δυνατό, ευέλικτο, και ψηφιακό κράτος. Με διαρκή αξιολόγηση.
-
16-09-07, 00:02 Απάντηση: Ερώτηση για bash #48
Λοιπόν δούλεψε μια χαρά.
Νά' σαι καλά parsifal.
Το τελικό σκριπτάκι είναι αυτό:
<?PHP:#!/bin/bash
dir1=$1
dir2=$2
cd "$dir1"
ls -1 | while read file
do
rm -f "$file"
ln -s ../"$dir2"/"$file" "$file"
done
rm -f "$dir1"
cd ..
<?PHP:rm -f "$dir1"
Γλύτωσα 3.5GBytes χώρου, τα δε symlinks είναι παντελώς διάφανα στο άλλο άκρο (μεσολαβούν samba και Windows).
Χαμπάρι δεν παίρνουν τα χαζοWindows της Microσόφτεξ.Επιτέλους το ελάχιστο δυνατό, ευέλικτο, και ψηφιακό κράτος. Με διαρκή αξιολόγηση.
-
16-09-07, 01:10 Απάντηση: Ερώτηση για bash #49
Επίσης, η τελευταία cd .. είναι περιττή, αφού στη συνέχεια τερματίζεται το bash process που εκτελούσε το script και επιστρέφεις στο αρχικό περιβάλλον με τρέχοντα κατάλογο ίδιο με αυτόν που ήταν και πριν την εκτέλεση του script...
Τελευταία επεξεργασία από το μέλος parsifal : 16-09-07 στις 01:15.
-
16-09-07, 01:28 Απάντηση: Ερώτηση για bash #50
-
16-09-07, 03:25 Απάντηση: Ερώτηση για bash #51
Κι ένας πιο σύντομος τρόπος...
Κώδικας:#! /bin/bash [ "$2" == "" ] && exit 1 cd "$1" for f in *; do [ -f "../$2/$f" ] && rm -f "$f" && ln -s "../$2/$f" . done
-
01-10-07, 22:26 Απάντηση: Ερώτηση για bash #52
Καλησπέρα
Να ρωτησω κάτι
Θελω να σώσω το output της εντολής python -V στην μεταβλητη a
Πως θα το κάνω?
Δοκιμασα διαφορα αλλα τπτ δεν μου βγήκε
-
01-10-07, 22:33 Απάντηση: Ερώτηση για bash #53Κώδικας:
a=`python -V`
-
01-10-07, 22:47 Απάντηση: Ερώτηση για bash #54
Και όμως όχι
Κώδικας:[root@Nantia(Arch) hwoarang]# a=`python -V` Python 2.5.1 [root@Nantia(Arch) hwoarang]# echo $a [root@Nantia(Arch) hwoarang]#
-
01-10-07, 23:03 Απάντηση: Ερώτηση για bash #55
Μάλιστα. Προφανώς το -V switch στέλνει το output στο stderr και όχι στο stdout. Δοκίμασε:
Κώδικας:a=`python -V 2>&1`
Τελευταία επεξεργασία από το μέλος parsifal : 01-10-07 στις 23:04.
-
01-10-07, 23:11 Απάντηση: Ερώτηση για bash #56
-
01-10-07, 23:13 Απάντηση: Ερώτηση για bash #57
-
01-10-07, 23:24 Απάντηση: Ερώτηση για bash #58
Τα 1, 2 κλπ είναι συντομεύσεις προς τον πίνακα των file descriptors του kernel. Εξ ορισμού, o 0 είναι η στάνταρ είσοδος (stdin), 1 η στάνταρ έξοδος (stdout), 2 ή έξοδος λάθους (stderr) κλπ.
Όπως κάνεις redirection από/προς ένα αρχείο (π.χ. ls -l > list.txt), μπορείς να ορίσεις διάφορες ανακατευθύνσεις και για το standard I/O, προσπερνώντας τις default συμβάσεις, αφού και τα stdin, stout, stderr ως αρχεία αναπαριστώνται.
Υπάρχει η ειδική μεταβλητή περιβάλλοντος $? που είναι πάντα ενήμερη για το exit code της διεργασίας που έχει τερματιστεί πιο πρόσφατα*.
*Χωρίς να είμαι σίγουρος, λογικά μέσα στο context της καλούσας διεργασίας, δηλαδή του συγκεκριμένου bash instance που εκτελεί το script. Οπότε, μη σε προβληματίζουν θέματα multitasking και λοιπών διεργασιών που τρέχουν στο σύστημα...Τελευταία επεξεργασία από το μέλος parsifal : 01-10-07 στις 23:30.
-
01-10-07, 23:24 Απάντηση: Ερώτηση για bash #59
-
01-10-07, 23:39 Απάντηση: Ερώτηση για bash #60
Παρόμοια Θέματα
-
Βοήθεια για ένα απλό bash script
Από AddictedToChaos στο φόρουμ Unix - LinuxΜηνύματα: 34Τελευταίο Μήνυμα: 22-07-11, 01:57 -
bash - matlab
Από simeon.mattes στο φόρουμ Unix - LinuxΜηνύματα: 25Τελευταίο Μήνυμα: 25-06-08, 23:00 -
Bash Script help (Αρχάριος)
Από weakwire στο φόρουμ Unix - LinuxΜηνύματα: 12Τελευταίο Μήνυμα: 08-05-07, 00:41 -
bash rename (mv)
Από hayzel στο φόρουμ Unix - LinuxΜηνύματα: 6Τελευταίο Μήνυμα: 07-01-07, 16:33
Bookmarks