Εδώ πάντως ο κώδικάς σου λειτουργεί:
Μήπως το do_something περιμένει να είναι exported η variable;Κώδικας:#!/usr/bin/env bash PROFILABLE=0 function_1(){ if true; then PROFILABLE=1 fi } function_2(){ #Δεν είναι ποτέ αληθής η ισότητα, χάνεται η τιμή 1 όταν και αν δωθεί if [[ "$PROFILABLE" -eq 1 ]] ; then echo οκ fi echo $PROFILABLE #Πάντα είναι 0 } echo $PROFILABLE function_1 function_2
Εμφάνιση 1.216-1.230 από 2222
Θέμα: Ερώτηση για bash
-
01-09-17, 16:28 Απάντηση: Ερώτηση για bash #1216
- Εγγραφή
- 27-08-2004
- Περιοχή
- internet
- Μηνύματα
- 23.371
- Downloads
- 58
- Uploads
- 17
- Άρθρα
- 9
- Ταχύτητα
- 49999 / 4999
- ISP
- ΟΤΕ Conn-x
- DSLAM
- ΟΤΕ - ΚΟΥΝΟΥΠΙΔΙΑΝΩΝ
Gentoo Linux: mess with the best and you might learn something
δικτυακή παράσταση | twitter | within specifications
Αν φτάσω τα 100 και με ρωτήσουν το μυστικό της μακροζωίας θα πω: Πάντα είχα 3 ποτήρια μπροστά μου· ένα με νερό, ένα με καφέ & ένα με αλκοόλ.
-
01-09-17, 20:19 Απάντηση: Ερώτηση για bash #1217
Μήπως είναι θέμα shebang;
-
01-09-17, 21:13 Απάντηση: Ερώτηση για bash #1218
Όπως είπε και ο mrsaccess, ο κώδικας όπως μας τον δίνεις, λειτουργεί κανονικά. Στο bash αν δεν ορίσεις κάποια μεταβλητή σαν local, τότε είναι global και μπορείς να την αλλάξεις από παντού. Για να απαντήσουμε πρέπει να δούμε και το υπόλοιπο πρόγραμμα. Από αυτό που βλέπω, το μόνο που έρχεται στο μυαλό είναι να τρέχεις την συνάρτηση μέσα από κάποια μεταβλητή ώστε να αποθηκεύσεις αυτό που επιστρέφει, με συνέπεια να τρέχει σε κάποιο subshell.
Κώδικας:#!/bin/bash PROFILABLE=0 function_1(){ echo Running function_1 PROFILABLE=1 } function_3(){ echo Running function_3 PROFILABLE=3 } function_2(){ #Δεν είναι ποτέ αληθής η ισότητα, χάνεται η τιμή 1 όταν και αν δωθεί if [[ "$PROFILABLE" -eq 1 ]] ; then echo Hello fi echo $PROFILABLE #Πάντα είναι 0 } echo Profilable before function1 = $PROFILABLE function_1 echo Profilable after function1 = $PROFILABLE function_2 PETRAN=$(function_3) echo PETRAN = $PETRAN echo Profilable after function3 = $PROFILABLE
Κώδικας:Έξοδος: % ./tmp.sh Profilable before function1 = 0 Running function_1 Profilable after function1 = 1 Hello 1 PETRAN = Running function_3 Profilable after function3 = 1
Edit: Ξέχασα να αναφέρω ότι το παραπάνω το έγραψα σαν παράδειγμα. Υπάρχουν πολλές περιπτώσεις στις οποίες μια εντολή θα τρέξει σε subshell.Τελευταία επεξεργασία από το μέλος imitheos : 01-09-17 στις 21:19.
"I like offending people, because I think people who get offended should be offended" - Linus Torvalds
"Παλιά είχαμε φτωχούς οι οποίοι ζούσανε σε φτωχογειτονιές. Τώρα, η οικονομικά δυσπραγούσα τάξη
κατέχει στέγες υποδεέστερης ποιότητας σε υποβαθμισμένα αστικά κέντρα" - George Carlin
Γα.... την πολιτική ορθότητα.
-
02-09-17, 00:43 Απάντηση: Ερώτηση για bash #1219
Προσπαθώ να αυτοματοποιήσω τις cflags για το PGO και για λόγους πειραματισμού/εφέ, ήθελα το portage να τυπώνει τα εκτελέσιμα που έχουν γίνει compile με PGO[1].
Ουσιαστικά έχω hardcoded τις κατηγορίες για τα πακέτα των οποίων θα εφαρμόζει τις εν λόγω flags και ανάλογα με το αν υπάρχουν ή όχι τα στατιστικά χρήσης (.gcda) θα πράττει τα δέοντα για να κάνει profiling το πακέτο.
Κώδικας:cat /etc/portage/bashrc
Κώδικας:#!/bin/bash PGO_DIR=/var/tmp/pgo PROFILE_DIR=${PGO_DIR}/${PN} PROFILABLE=0 CFLAGS_PROFILE_GEN="-fprofile-generate=${PROFILE_DIR} -fprofile-arcs -fvpt" CFLAGS_PROFILE_USE="-fprofile-use=${PROFILE_DIR} -fprofile-correction" LDFLAGS_PROFILE_GEN="-fprofile-arcs" CFLAGS_CUSTOM="" LDFLAGS_CUSTOM="" post_src_unpack() { if type epatch_user >& /dev/null; then cd "${S}" epatch_user fi case "${CATEGORY}" in *app-editor* | *dev-* | *kde-* | *mail-client* | *media-video* | *www-client* ) echo "1" > /tmp/profile elog "Will try to profile" "${PN}" if [ -d ${PROFILE_DIR} ] then elog "Running with PGO for the first time" CFLAGS="${CFLAGS} ${CFLAGS_CUSTOM} ${CFLAGS_PROFILE_USE}" LDFLAGS="${LDFLAGS} ${LDFLAGS_CUSTOM}" else CFLAGS="${CFLAGS} ${CFLAGS_CUSTOM} ${CFLAGS_PROFILE_GEN}" LDFLAGS="${LDFLAGS} ${LDFLAGS_CUSTOM} ${LDFLAGS_PROFILE_GEN}" fi CXXFLAGS="${CFLAGS}" esac }
Spoiler:Με ΜΑΤ και βία δεν βγαίνει πανδημία, Μιχαλάκη και Κούλη.
-
02-09-17, 11:33 Απάντηση: Ερώτηση για bash #1220
Δεν θυμάμαι πολύ καλά τα internals της portage αλλά ίσως να είναι αυτό που είπα πριν και η portage να τρέχει κάθε συνάρτηση σε δικό της subshell οπότε για αυτό να μην παίζει. Ίσως να λέω και χαζομάρες βέβαια.
Θυμάμαι όλοι να λένε within portage-bashrc lies madness και δεν πολυ ασχολήθηκα με bashrc.
Όσον αφορά τον κώδικα, λες if [ -d $PROFILE_DIR]; echo "Running for first time". Αν υπάρχει ο κατάλογος δεν σημαίνει ότι κάποια στιγμή ξαναέτρεξε το PGO ?"I like offending people, because I think people who get offended should be offended" - Linus Torvalds
"Παλιά είχαμε φτωχούς οι οποίοι ζούσανε σε φτωχογειτονιές. Τώρα, η οικονομικά δυσπραγούσα τάξη
κατέχει στέγες υποδεέστερης ποιότητας σε υποβαθμισμένα αστικά κέντρα" - George Carlin
Γα.... την πολιτική ορθότητα.
-
02-09-17, 11:42 Απάντηση: Ερώτηση για bash #1221
-
02-09-17, 13:48 Απάντηση: Ερώτηση για bash #1222
Για αυτά τα πάντα μπαίνουν σε git repo και κάνεις commits που εξηγείς και την πιο μικρή αλλαγή
Κώδικας:# cd /etc # git log gentoo --pretty=oneline|wc -l 207 # git log slackware --pretty=oneline|wc -l 562
"I like offending people, because I think people who get offended should be offended" - Linus Torvalds
"Παλιά είχαμε φτωχούς οι οποίοι ζούσανε σε φτωχογειτονιές. Τώρα, η οικονομικά δυσπραγούσα τάξη
κατέχει στέγες υποδεέστερης ποιότητας σε υποβαθμισμένα αστικά κέντρα" - George Carlin
Γα.... την πολιτική ορθότητα.
-
02-09-17, 14:09 Απάντηση: Ερώτηση για bash #1223
- Εγγραφή
- 27-08-2004
- Περιοχή
- internet
- Μηνύματα
- 23.371
- Downloads
- 58
- Uploads
- 17
- Άρθρα
- 9
- Ταχύτητα
- 49999 / 4999
- ISP
- ΟΤΕ Conn-x
- DSLAM
- ΟΤΕ - ΚΟΥΝΟΥΠΙΔΙΑΝΩΝ
Very interesting approach () αλλά αυτό με τα permissions και τα ownerships με τρομάζει!
Gentoo Linux: mess with the best and you might learn something
δικτυακή παράσταση | twitter | within specifications
Αν φτάσω τα 100 και με ρωτήσουν το μυστικό της μακροζωίας θα πω: Πάντα είχα 3 ποτήρια μπροστά μου· ένα με νερό, ένα με καφέ & ένα με αλκοόλ.
-
02-09-17, 16:56 Απάντηση: Ερώτηση για bash #1224
Ναι όντως είναι λίγο μανούρα με τις άδειες. Πιάστηκα όμως από τον εαυτό μου που έχει όλο το /etc σε αποθετήριο και ξέχασα να αναφέρω κάτι πολύ πιο απλό που κάνει όλος ο κόσμος και δεν υπάρχει πρόβλημα. Στο /etc μόνο 5-10 αρχεία έχουν διαφορετικό ownership από root:root ή διαφορετικές άδειες από 644. Από τα υπόλοιπα αρχεία πάρα πολλά δεν τα πειράζεις συχνά ή και καθόλου. Οπότε αυτό που κάνουν πολλοί είναι να έχεις σε ένα αποθετήριο μόνο τα αρχεία ρυθμίσεων που πειράζεις συχνά (πχ profile, zshrc, portage-bashrc, κτλ) και να έχεις symlinks στο /etc που να δείχνουν στο αποθετήριο. Αυτό εννοούσα σαν πρόταση στον petran πριν απλά όπως πάντα έγραψα ό,τι να ναι
"I like offending people, because I think people who get offended should be offended" - Linus Torvalds
"Παλιά είχαμε φτωχούς οι οποίοι ζούσανε σε φτωχογειτονιές. Τώρα, η οικονομικά δυσπραγούσα τάξη
κατέχει στέγες υποδεέστερης ποιότητας σε υποβαθμισμένα αστικά κέντρα" - George Carlin
Γα.... την πολιτική ορθότητα.
-
19-09-17, 10:41 Απάντηση: Ερώτηση για bash #1225
Θελω απο διαφορα addon.xml (ονομα του αρχειου), που ειναι σε διαφορετικους υποφακελους το καθενα αλλα ολα μεσα στο /storage/kodi/addons/ να σβηνω αυτοματα οποια γραμμη λεει πανω της "xbmc.service", πχ αυτη εδω θελω να φυγει ολοκληρη.
Κώδικας:<extension point="xbmc.service" library="service.py" start="startup" />
Το δοκιμασα ετσι
Κώδικας:# grep -rl "xbmc.service" /storage/.kodi/addons/ | xargs sed -i 'xbmc.service/d'
---edit
Ειχα ξεχασει ενα / μετα το sed
Κώδικας:# grep -rl "xbmc.service" /storage/.kodi/addons/ | xargs sed -i '/xbmc.service/d'
Τελευταία επεξεργασία από το μέλος jim_p : 19-09-17 στις 11:13.
ديميتريس
-
19-09-17, 11:26 Απάντηση: Ερώτηση για bash #1226Κώδικας:
find /storage/blah -name "addons.xml" -exec sed -i '/xbmc\.service/d' {} \;
Εναλλακτικά, αν το shell σου υποστηρίζει globbing υποφακέλων με τον μεταχαρακτήρα **, τότε μπορείς να χρησιμοποιήσεις μόνο του το sed.
Proof of concept:
Κώδικας:% cd /tmp % mkdir -p storage/a1 % mkdir -p storage/a2/b1 % mkdir -p storage/c3/d2 # Δημιουργία ενός αρχείου addons.xml σε κάθε άδειο κατάλογο % find /tmp/storage -type d -empty -exec touch {}/addons.xml \; % ls /tmp/storage/**/addons.xml /tmp/storage/a1/addons.xml /tmp/storage/c3/d2/addons.xml /tmp/storage/a2/b1/addons.xml
"I like offending people, because I think people who get offended should be offended" - Linus Torvalds
"Παλιά είχαμε φτωχούς οι οποίοι ζούσανε σε φτωχογειτονιές. Τώρα, η οικονομικά δυσπραγούσα τάξη
κατέχει στέγες υποδεέστερης ποιότητας σε υποβαθμισμένα αστικά κέντρα" - George Carlin
Γα.... την πολιτική ορθότητα.
-
19-09-17, 13:53 Απάντηση: Ερώτηση για bash #1227
Ωραια, σημειωνω και την εκδοχη με το find να την εχω.
ديميتريس
-
20-09-17, 18:14 Απάντηση: Ερώτηση για bash #1228
Στο wiki του openelec για το autostart.sh* λεει πως το autostart.sh πρεπει να ξεκιναει με "{" και να τελειωνει με "} &". Για ποιο λογο?
Το αρχει δεν ειναι καποιο bash script, μιας και δεν ξεκιναει με #!/bin/bash, ουτε ειναι εκτελεσιμο
Κώδικας:# file .config/autostart.sh .config/autostart.sh: ASCII text
Κώδικας:$ file bin/savoura.sh bin/savoura.sh: Bourne-Again shell script, ASCII text executable
- - - Updated - - -
---edit
Το βρηκα το δευτερο κομματι. Παραμενει η ερωτηση για τις αγκυλες
http://openelec.tv/forum/64-installa...sh-file#137886ديميتريس
-
20-09-17, 20:08 Απάντηση: Ερώτηση για bash #1229
Όχι με αγκύλες αλλά με παρενθέσεις. Στο εξηγεί γιατί. Μπορεί εσύ να έχεις βάλει εντολές οι οποίες να χρειάζονται πολύ χρόνο οπότε αυτό θα καθυστερήσει την εκκίνηση του προγράμματος. Βάζεις τις εντολές που θέλεις μέσα σε παρενθέσεις οπότε λες ότι θέλεις να τρέξουν μέσα σε subshell και έπειτα βάζεις και το & ώστε όλο αυτό το πράγμα να τρέξει στο παρασκήνιο.
Το ό,τι δεν είναι εκτελέσιμο και ότι δεν αρχίζει με κάποιο shebang δεν σημαίνει ότι δεν είναι shell script απλά ότι δεν θα τρέξει αυτόνομα, όπως ανακάλυψες και μόνος σου. Σε πολλές περιπτώσεις (πχ /etc/profile.d, /etc/X11/xinitrc.d, κτλ) έχεις ένα κεντρικό shell script το οποίο "κάνει source" πολλά άλλα υπό ορισμένες συνθήκες. Αυτά δεν έχουν το κλασικό shebang #!/bin/τάδε επειδή "καλούνται" από αλλού.
Κώδικας:% cat a.sh #!/bin/bash echo Hello # Κάνουμε source το αρχείο b.sh . ./b.sh % cat b.sh echo World % chmod 755 a.sh % chmod 644 b.sh % ./a.sh Hello World
"I like offending people, because I think people who get offended should be offended" - Linus Torvalds
"Παλιά είχαμε φτωχούς οι οποίοι ζούσανε σε φτωχογειτονιές. Τώρα, η οικονομικά δυσπραγούσα τάξη
κατέχει στέγες υποδεέστερης ποιότητας σε υποβαθμισμένα αστικά κέντρα" - George Carlin
Γα.... την πολιτική ορθότητα.
-
20-09-17, 20:25 Απάντηση: Ερώτηση για bash #1230
Παρενθεσεις? ΠΑΡΕΝΘΕΣΕΙΣ?!?! Και εγω εχω τοσα χρονια αγκυλες! Παω να τις αλλαξω τωρα.
Αν τις βγαλω εντελως, απλα θα περιμενει να τελειωσει οτι ειναι μεσα στις παρανθεσεις για να συνεχισει?
---edit
Τελικα μονο στο autostart.sh του pi zero ειχα αγκυλες και μεσα σε αυτες μονο ενα ακυρο rm, οποτε μικρο το κακο.Τελευταία επεξεργασία από το μέλος jim_p : 20-09-17 στις 20:31.
ديميتريس
Παρόμοια Θέματα
-
Βοήθεια για ένα απλό 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