Έχω ένα bash script το οποίο παράγει κάποιο output στην κονσόλα με echo:
Όλα καλά ως εδώ. Θέλω να καλέσω αυτό το script μέσα από ένα άλλο, αλλά το output της κονσόλας να γίνει indented. Δοκίμασα με sed, και παίζει μιά χαρά:Κώδικας:#!/bin/bash -e words="some string with spaces to separate words" for word in ${words}; do # my code is here echo -n "-" done echo "Done!"
Το θέμα είναι ότι η sed περιμένει να τελειώσει η γραμμή πριν εμφανίσει το output, οπότε όση ώρα το αρχικό script είναι μέσα στο loop και καλεί την echo -n δεν έχω output, μέχρι να βγει από το loop και τελειώσει η γραμμή. Υπάρχει τρόπος να κάνω το indentation και να έχω output σε πραγματικό χρόνο;Κώδικας:my_script | sed 's/^/ /'
Εμφάνιση 1.246-1.260 από 2222
Θέμα: Ερώτηση για bash
-
05-03-18, 21:08 Απάντηση: Ερώτηση για bash #1246
-
05-03-18, 21:23 Απάντηση: Ερώτηση για bash #1247
- Εγγραφή
- 27-08-2004
- Περιοχή
- internet
- Μηνύματα
- 23.371
- Downloads
- 58
- Uploads
- 17
- Άρθρα
- 9
- Ταχύτητα
- 49999 / 4999
- ISP
- ΟΤΕ Conn-x
- DSLAM
- ΟΤΕ - ΚΟΥΝΟΥΠΙΔΙΑΝΩΝ
Τρέξε ένα `echo -n` που κάνει το indentation πριν τρέξεις το for; Ή εναλλακτικά πριν τρέξεις το script;
Κώδικας:echo -n " " && my_script
Κώδικας:echo -n " " for word in ${words}; do # my code is here echo -n "-" done
Gentoo Linux: mess with the best and you might learn something
δικτυακή παράσταση | twitter | within specifications
Αν φτάσω τα 100 και με ρωτήσουν το μυστικό της μακροζωίας θα πω: Πάντα είχα 3 ποτήρια μπροστά μου· ένα με νερό, ένα με καφέ & ένα με αλκοόλ.
-
05-03-18, 22:15 Απάντηση: Ερώτηση για bash #1248
Ούτε το ένα ούτε το άλλο γίνεται. Το script δεν μπορώ να το αλλάξω γιατί είναι πολύ γενικού χαρακτήρα, και έτσι κι αλλιώς ανάλογα με το που το καλώ θέλω το indentation να είναι διαφορετικό. Το να καλώ echo -n πριν το script επίσης δεν γίνεται γιατί έχει πολλές σειρές output, με τον τρόπο αυτό θα γίνει μόνο η πρώτη indent. Ψάχνω πιο σοφιστικέ λύσεις, τις απλές πιστεύω τις έχω σκεφτεί ήδη
-
05-03-18, 22:25 Απάντηση: Ερώτηση για bash #1249
- Εγγραφή
- 27-08-2004
- Περιοχή
- internet
- Μηνύματα
- 23.371
- Downloads
- 58
- Uploads
- 17
- Άρθρα
- 9
- Ταχύτητα
- 49999 / 4999
- ISP
- ΟΤΕ Conn-x
- DSLAM
- ΟΤΕ - ΚΟΥΝΟΥΠΙΔΙΑΝΩΝ
Ε, τότε αν το βάλεις σαν μεταβλητή που περνάς στο script και την τυπώνει πριν την for με `echo -n`;
Gentoo Linux: mess with the best and you might learn something
δικτυακή παράσταση | twitter | within specifications
Αν φτάσω τα 100 και με ρωτήσουν το μυστικό της μακροζωίας θα πω: Πάντα είχα 3 ποτήρια μπροστά μου· ένα με νερό, ένα με καφέ & ένα με αλκοόλ.
-
05-03-18, 22:35 Απάντηση: Ερώτηση για bash #1250
-
05-03-18, 22:54 Απάντηση: Ερώτηση για bash #1251
- Εγγραφή
- 27-08-2004
- Περιοχή
- internet
- Μηνύματα
- 23.371
- Downloads
- 58
- Uploads
- 17
- Άρθρα
- 9
- Ταχύτητα
- 49999 / 4999
- ISP
- ΟΤΕ Conn-x
- DSLAM
- ΟΤΕ - ΚΟΥΝΟΥΠΙΔΙΑΝΩΝ
Sanitation is easy. Πριν το for:
Κώδικας:INDENTATION=${INDENTATION:-} echo -n "${INDENTATION//[^[:space:]]/}"
Όσοι θέλουν να το εκμεταλλευτούν, κάνουν export το INDENTATION.Gentoo Linux: mess with the best and you might learn something
δικτυακή παράσταση | twitter | within specifications
Αν φτάσω τα 100 και με ρωτήσουν το μυστικό της μακροζωίας θα πω: Πάντα είχα 3 ποτήρια μπροστά μου· ένα με νερό, ένα με καφέ & ένα με αλκοόλ.
-
06-03-18, 18:00 Απάντηση: Ερώτηση για bash #1252
Υπάρχουν πολλές μέθοδοι για αυτό με εξωτερικές εντολές (όπως με το sed που έτρεξες) αλλά δυστυχώς όσες μου έρχονται στο μυαλό όλες δουλεύουν με line buffering δηλαδή θα σου εμφανίσουν στο τέλος την γραμμή όπως κάνει και το sed.
Όταν θέλεις να χώσεις ένα "hook" πριν μια εντολή τότε αυτό συνήθως γίνεται με traps. Ένας τρόπος θα ήταν ο παρακάτω:
Κώδικας:% cat z1.sh #!/bin/bash -e words="some string with spaces to separate words" echo Starting for word in ${words}; do sleep 1 echo -n "-" done echo Finishing echo Done % cat z2.sh #!/bin/bash -e function GEO() { if [[ "$BASH_COMMAND" =~ ^echo ]]; then echo -ne "\t" fi } set -o functrace trap 'GEO' DEBUG source ./z1.sh % ./z1.sh Starting -------Finishing Done % ./z2.sh Starting - - - - - - - Finishing Done
Όταν μιλάμε για interactive shells, τότε είναι πολύ εύκολη η λύση γιατί μπορείς με την συνάρτηση PROMPT_COMMAND να το κάνεις να μην τρέχει πολλαπλές φορές μέσα σε βρόχους και επίσης μπορείς πολύ πιο εύκολα να χρησιμοποιήσεις την μεταβλητή PS0 χωρίς traps και βλακείες. Όλα αυτά όμως νομίζω δεν παίζουν σε scripts.
Ίσως φυσικά να γίνεται και πιο απλά με μία εντολή και να μην το γνωρίζω"I like offending people, because I think people who get offended should be offended" - Linus Torvalds
"Παλιά είχαμε φτωχούς οι οποίοι ζούσανε σε φτωχογειτονιές. Τώρα, η οικονομικά δυσπραγούσα τάξη
κατέχει στέγες υποδεέστερης ποιότητας σε υποβαθμισμένα αστικά κέντρα" - George Carlin
Γα.... την πολιτική ορθότητα.
-
30-10-18, 22:44 Απάντηση: Ερώτηση για bash #1253
κάτω από ένα φάκελο έχω mp3 αρχεία απο audiobook. Τα αρχεία πάνε
Κώδικας:CD01 track01 CD01 track02 CD01 trackXX CD02 track01 CD02 track02 CD05 track01 .......... ........
για ένα cd μπορεί να φτιαχτεί m3u με
Κώδικας:ls -1 > playlist.m3u
-
30-10-18, 22:48 Απάντηση: Ερώτηση για bash #1254
- Εγγραφή
- 27-08-2004
- Περιοχή
- internet
- Μηνύματα
- 23.371
- Downloads
- 58
- Uploads
- 17
- Άρθρα
- 9
- Ταχύτητα
- 49999 / 4999
- ISP
- ΟΤΕ Conn-x
- DSLAM
- ΟΤΕ - ΚΟΥΝΟΥΠΙΔΙΑΝΩΝ
Κώδικας:find . -type f > playlist.m3u
Gentoo Linux: mess with the best and you might learn something
δικτυακή παράσταση | twitter | within specifications
Αν φτάσω τα 100 και με ρωτήσουν το μυστικό της μακροζωίας θα πω: Πάντα είχα 3 ποτήρια μπροστά μου· ένα με νερό, ένα με καφέ & ένα με αλκοόλ.
-
30-10-18, 23:05 Απάντηση: Ερώτηση για bash #1255
τσου...
δεν βγαίνει σωστά η σειρά
Κώδικας:..AudioBooks/Bobbie Peers/Luridiumstyven % find . -type f ./04 Luridiumstyven CD 04 Spor 04.mp3 ./03 Luridiumstyven CD 01 Spor 03.mp3 ./11 Luridiumstyven CD 04 Spor 11.mp3 ./16 Luridiumstyven CD 01 Spor 16.mp3 ./06 Luridiumstyven CD 02 Spor 06.mp3 ./02 Luridiumstyven CD 03 Spor 02.mp3 ./13 Luridiumstyven CD 02 Spor 13.mp3 ./07 Luridiumstyven CD 02 Spor 07.mp3 ./03 Luridiumstyven CD 03 Spor 03.mp3 ./12 Luridiumstyven CD 02 Spor 12.mp3
Τελευταία επεξεργασία από το μέλος patch : 30-10-18 στις 23:11.
-
30-10-18, 23:19 Απάντηση: Ερώτηση για bash #1256
-
30-10-18, 23:24 Απάντηση: Ερώτηση για bash #1257Κώδικας:
./01 Luridiumstyven CD 01 Spor 01.mp3 ./01 Luridiumstyven CD 02 Spor 01.mp3 ./01 Luridiumstyven CD 03 Spor 01.mp3 ./01 Luridiumstyven CD 04 Spor 01.mp3 ./02 Luridiumstyven CD 01 Spor 02.mp3 ./02 Luridiumstyven CD 02 Spor 02.mp3 ./02 Luridiumstyven CD 03 Spor 02.mp3 ./02 Luridiumstyven CD 04 Spor 02.mp3 ./03 Luridiumstyven CD 01 Spor 03.mp3 ./03 Luridiumstyven CD 02 Spor 03.mp3 ./03 Luridiumstyven CD 03 Spor 03.mp3 ./03 Luridiumstyven CD 04 Spor 03.mp3 ./04 Luridiumstyven CD 01 Spor 04.mp3 ./04 Luridiumstyven CD 02 Spor 04.mp3 ./04 Luridiumstyven CD 03 Spor 04.mp3
για ενα cd πρεπει να δώσω
Κώδικας:ls -w1 | grep 'CD 01' > playlist.m3u
-
31-10-18, 10:57 Απάντηση: Ερώτηση για bash #1258
Τελευταία επεξεργασία από το μέλος MitsakosGR : 31-10-18 στις 12:00.
-
31-10-18, 21:46 Απάντηση: Ερώτηση για bash #1259
-
27-11-18, 16:31 Απάντηση: Ερώτηση για bash #1260
Εστω ενα git repo, στο github συγκεκριμενα, καποιου ασχετου dev, το οποιο κανω git clone καθε τοσο στο δικο μου pc.
α) Επειδη ειναι μεγαλο (200+MB) και καθε φορα πρεπει να περιμενω αρκετη ωρα για να το κανει ολο, και οσο το κανει το git μου τρωει ολο το bw, υπαρχει τροπος να κατεβαζει καθε φορα μονο οτι αλλαξε και οχι οτι βρισκει μπροστα του?
β) Αν το παραπανω δεν γινεται, επειδη απο αυτα τα 200+MB ενα μεγαλο ποσοστο ειναι σαβουρα στον κρυφο φακελο .git, γινεται με καποιο τροπο να τον παρακαμπτει?ديميتريس
Παρόμοια Θέματα
-
Βοήθεια για ένα απλό 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