Σελ. 105 από 106 ΠρώτηΠρώτη ... 8595100103104105106 ΤελευταίαΤελευταία
Εμφάνιση 1.561-1.575 από 1590
  1. #1561
    Εγγραφή
    06-07-2005
    Περιοχή
    Νέα Υόρκη
    Ηλικία
    46
    Μηνύματα
    9.302
    Downloads
    6
    Uploads
    2
    Τύπος
    Cable
    Ταχύτητα
    70 Mbps down/6 Mbps up
    ISP
    Spectrum
    Παράθεση Αρχικό μήνυμα από imitheos Εμφάνιση μηνυμάτων
    Οι "ευκολίες" που παρέχει ένα κέλυφος είναι μόνο στην γραμμή εντολών και όχι μέσω μεταβλητών. Το {2015.2100} στην γραμμή εντολών σημαίνει 2015 2016 2017 κτλ ενώ μέσω μεταβλητής σημαίνει το {2015..2100} αυτό καθεαυτό.

    Κώδικας:
    % touch "{2015..2100}"
    % ls -al
    -rw-r--r--  1 user    users          0 Ιουλ 24 13:35 {2015..2100}
    
    % tar cvf lala.tar \{2015..2100\} 
    {2015..2100}
    % tar tvf lala.tar 
    -rw-r--r-- user/users      0 2021-07-24 13:35 {2015..2100}
    
    % tar tvf lala.tar --wildcards --no-anchored {2015..2100}* 
    tar: 2015*: Δεν βρέθηκε στην αρχειοθήκη                       
    tar: 2016*: Δεν βρέθηκε στην αρχειοθήκη
    tar: 2099*: Δεν βρέθηκε στην αρχειοθήκη
    tar: 2100*: Δεν βρέθηκε στην αρχειοθήκη
    tar: Exiting with failure status due to previous errors
    
    % years="{2015..2100}"  
    % tar tvf lala.tar --wildcards --no-anchored ${years}* 
    -rw-r--r-- user/users      0 2021-07-24 13:35 {2015..2100}
    Βλέπεις ότι μέσω μεταβλητής, ψάχνει αυτούσιο το string που του δίνεις. Σε κάποιες περιπτώσεις (πχ globbing), λόγω συχνής χρήσης, υπάρχει τρόπος να χρησιμοποιήσεις μεταβλητή αλλά, με ένα περιθώριο να κάνω λάθος, νομίζω πως σε brace expansion δεν μπορείς να το κάνεις. Αν δεν το είχες σαν όρισμα στο tar αλλά σε κάτι στο bash (πχ ένα for), τότε η κλασική λύση θα ήταν να χρησιμοποιήσεις το seq αλλά τώρα δεν γίνεται. Αυτό που μπορείς να κάνεις τώρα είναι να χρησιμοποιήσεις το eval που παίρνει αυτό που βλέπει και το κάνει ακόμη μία περασιά και είναι η κλασική λύση για τέτοια πράγματα.

    Κώδικας:
    % eval tar tvf lala.tar --wildcards --no-anchored ${years}"* 
    tar: 2015: Δεν βρέθηκε στην αρχειοθήκη
    tar: 2016: Δεν βρέθηκε στην αρχειοθήκη
    tar: 2099: Δεν βρέθηκε στην αρχειοθήκη
    tar: 2100: Δεν βρέθηκε στην αρχειοθήκη
    tar: Exiting with failure status due to previous errors
    Το κέλυφος έκανε variable substitution δηλαδή το ${years} έγινε {2015..2100} και μετά το eval βλέπει το {2015..2100} και το κάνει brace expansion σε 2015 2016 κτλ.

    Δες το μήπως σε βολεύει, αλλά έχε στο νου σου ότι το eval είναι πολύ δυνατό και πολλές φορές δημιουργεί προβλήματα.
    Ευχαριστώ, το eval δούλεψε. Δεν ξέρω τι προβλήματα μπορεί να δημιουργήσει, αλλά η συγκεκριμένη περίπτωση είναι απλή, οπότε πρέπει να είναι οκ.

    - - - Updated - - -

    Άλλη ερώτηση:

    Κώδικας:
    for i in {1..5}; do script_a && script_b && script_c; done
    Τα && δεν αφήνουν τις παρακάτω εντολές να συνεχίσουν αν επιστρέψει κάποιο από τα script_[ab] exit code μη μηδενικό. Πως κάνω το ίδιο να γίνει για το script_c;

  2. #1562
    Εγγραφή
    20-12-2005
    Μηνύματα
    2.893
    Downloads
    4
    Uploads
    0
    Τύπος
    VDSL2
    Ταχύτητα
    49997/4997
    ISP
    ΟΤΕ Conn-x
    DSLAM
    ΟΤΕ - ΞΑΝΘΗ
    Router
    Speedport W 724V
    SNR / Attn
    24,4(dB) / (dB)
    Παράθεση Αρχικό μήνυμα από tsigarid Εμφάνιση μηνυμάτων
    Άλλη ερώτηση:

    Κώδικας:
    for i in {1..5}; do script_a && script_b && script_c; done
    Τα && δεν αφήνουν τις παρακάτω εντολές να συνεχίσουν αν επιστρέψει κάποιο από τα script_[ab] exit code μη μηδενικό. Πως κάνω το ίδιο να γίνει για το script_c;
    Δεν κατάλαβα τι θέλεις να κάνεις εδώ. Τι να γίνει το ίδιο δηλαδή για το c αφού δεν έχει κάτι άλλο μετά;

    Έτσι όπως το καταλαβαίνω, αν το a αποτύχει, θα εκτελεστεί 5 φορές μόνο το a. Αν το a πετύχει αλλά αποτύχει το b, θα εκτελεστούν 5 φορές τα a και b. Αν επιτύχουν τα a και b, θα εκτελεστούν 5 φορές και τα τρία scripts. Αν αποτύχει το c, τι θέλεις να γίνεται; Να σταματάει εντελώς ο βρόχος; Αν ναι, βάλε script_c || break.

    Edit: Άσχετο, έχει κάτι το φόρουμ ή εγώ βλέπω βλακείες; Μου εμφανίζει ότι έκανα post στις 16:47 ενώ το έκανα στις 17:47.
    "I like offending people, because I think people who get offended should be offended" - Linus Torvalds

    "Παλιά είχαμε φτωχούς οι οποίοι ζούσανε σε φτωχογειτονιές. Τώρα, η οικονομικά δυσπραγούσα τάξη
    κατέχει στέγες υποδεέστερης ποιότητας σε υποβαθμισμένα αστικά κέντρα" - George Carlin
    Γα.... την πολιτική ορθότητα.

  3. #1563
    Εγγραφή
    05-05-2003
    Περιοχή
    Λάρισα
    Μηνύματα
    7.593
    Downloads
    9
    Uploads
    0
    Τύπος
    VDSL2
    Ταχύτητα
    102400/10240
    ISP
    Wind
    DSLAM
    Wind - ΑΚΑΔΗΜΙΑ
    Router
    TG789vac V2
    Path Level
    Fastpath
    Εδώ το δείχνει πως το έκανες στις 5 όπως λες.

  4. #1564
    Εγγραφή
    09-09-2011
    Περιοχή
    /dev/random
    Μηνύματα
    1.036
    Downloads
    1
    Uploads
    0
    Τύπος
    FTTH
    Ταχύτητα
    120/120 Mbps
    ISP
    HCN
    Router
    MikroTik hAP ac²
    Παράθεση Αρχικό μήνυμα από imitheos Εμφάνιση μηνυμάτων
    Edit: Άσχετο, έχει κάτι το φόρουμ ή εγώ βλέπω βλακείες; Μου εμφανίζει ότι έκανα post στις 16:47 ενώ το έκανα στις 17:47.
    Εμένα δείχνει 17:47, μήπως στις Επιλογές Ημερομηνίας & Ώρας είναι κάτι λάθος;

  5. #1565
    Εγγραφή
    06-07-2005
    Περιοχή
    Νέα Υόρκη
    Ηλικία
    46
    Μηνύματα
    9.302
    Downloads
    6
    Uploads
    2
    Τύπος
    Cable
    Ταχύτητα
    70 Mbps down/6 Mbps up
    ISP
    Spectrum
    Παράθεση Αρχικό μήνυμα από imitheos Εμφάνιση μηνυμάτων
    Δεν κατάλαβα τι θέλεις να κάνεις εδώ. Τι να γίνει το ίδιο δηλαδή για το c αφού δεν έχει κάτι άλλο μετά;

    Έτσι όπως το καταλαβαίνω, αν το a αποτύχει, θα εκτελεστεί 5 φορές μόνο το a. Αν το a πετύχει αλλά αποτύχει το b, θα εκτελεστούν 5 φορές τα a και b. Αν επιτύχουν τα a και b, θα εκτελεστούν 5 φορές και τα τρία scripts. Αν αποτύχει το c, τι θέλεις να γίνεται; Να σταματάει εντελώς ο βρόχος; Αν ναι, βάλε script_c || break.

    Edit: Άσχετο, έχει κάτι το φόρουμ ή εγώ βλέπω βλακείες; Μου εμφανίζει ότι έκανα post στις 16:47 ενώ το έκανα στις 17:47.
    Δεν δουλεύει έτσι. Αν το a αποτύχει, όλο το loop σταματάει. Αν όμως το c αποτύχει, δεν ελέγχει το loop exit status οπότε αυξάνει το index κατά 1 και ξαναπάει στο a.

    - - - Updated - - -

    ΥΓ: Θα δοκιμάσω το || break την επόμενη φορά που θα το χρειαστώ, ευχαριστώ

  6. #1566
    Εγγραφή
    17-03-2003
    Περιοχή
    Ηράκλειο Κρήτης
    Μηνύματα
    2.874
    Downloads
    6
    Uploads
    0
    Ταχύτητα
    11050/648
    ISP
    COSMOTE
    Router
    OTE Oxygen Multigateway
    Εναλλακτικά στο παραπάνω, αν δεν θες την eval, μπορείς να πετύχεις το ίδιο αλλάζοντας μόνο την πρώτη γραμμή σε

    Κώδικας:
    years=$(echo {2015..2100})
    Οπότε το substitution θα γίνει στην years απευθείεας.

  7. #1567
    Εγγραφή
    06-07-2005
    Περιοχή
    Νέα Υόρκη
    Ηλικία
    46
    Μηνύματα
    9.302
    Downloads
    6
    Uploads
    2
    Τύπος
    Cable
    Ταχύτητα
    70 Mbps down/6 Mbps up
    ISP
    Spectrum
    Παράθεση Αρχικό μήνυμα από Eruyome(MMXGN) Εμφάνιση μηνυμάτων
    Εναλλακτικά στο παραπάνω, αν δεν θες την eval, μπορείς να πετύχεις το ίδιο αλλάζοντας μόνο την πρώτη γραμμή σε

    Κώδικας:
    years=$(echo {2015..2100})
    Οπότε το substitution θα γίνει στην years απευθείεας.
    Χωρίς να το δοκιμάσω, πιστεύω ότι θα φτιάξει ένα string με κενά, αντί για ένα array.

  8. #1568
    Εγγραφή
    17-03-2003
    Περιοχή
    Ηράκλειο Κρήτης
    Μηνύματα
    2.874
    Downloads
    6
    Uploads
    0
    Ταχύτητα
    11050/648
    ISP
    COSMOTE
    Router
    OTE Oxygen Multigateway
    Χμ σωστά. Λάθος μου. 'Αρα την eval δεν την αποφεύγεις.

    Αυτό που μπορείς να κάνεις βέβαια είναι να την περάσεις μέσα στην έκφραση με $(eval echo) ωστε περιορίσεις τη ζημιά αν πάει να γίνει.

    Πχ αντί για

    Κώδικας:
    eval tar tvf lala.tar --wildcards --no-anchored ${years}"*
    Να το κάνεις

    Κώδικας:
        tar -xvf ${file_tar} --wildcards --no-anchored $(eval echo ${months}${years}.*aij*${run}.nc)
    Τελευταία επεξεργασία από το μέλος Eruyome(MMXGN) : 28-07-21 στις 22:05.

  9. #1569
    Εγγραφή
    06-07-2005
    Περιοχή
    Νέα Υόρκη
    Ηλικία
    46
    Μηνύματα
    9.302
    Downloads
    6
    Uploads
    2
    Τύπος
    Cable
    Ταχύτητα
    70 Mbps down/6 Mbps up
    ISP
    Spectrum
    Μάλλον εννοείς $(eval ${years}). Θα το δοκιμάσω, δεν είναι κακή ιδέα.

  10. #1570
    Εγγραφή
    06-07-2005
    Περιοχή
    Νέα Υόρκη
    Ηλικία
    46
    Μηνύματα
    9.302
    Downloads
    6
    Uploads
    2
    Τύπος
    Cable
    Ταχύτητα
    70 Mbps down/6 Mbps up
    ISP
    Spectrum
    Παράθεση Αρχικό μήνυμα από tsigarid Εμφάνιση μηνυμάτων
    ΥΓ: Θα δοκιμάσω το || break την επόμενη φορά που θα το χρειαστώ, ευχαριστώ
    Μια χαρά δουλεύει! Η λύση ήταν τόσο απλή, που ούτε καν πέρασε από το μυαλό μου.

  11. #1571
    Εγγραφή
    07-02-2007
    Μηνύματα
    746
    Downloads
    6
    Uploads
    0
    Μια άλλη επιλογή είναι να ενεργοποιηθεί το set -e. Με τον τρόπο αυτό όποια εντολή επιστρέψει error code το script θα σταματήσει. Επίσης έτσι δεν χρειάζεται να κάνεις chaining με το &&

    https://stackoverflow.com/questions/...-a-bash-script
    Οδηγός για LaTeX στα Ελληνικά
    Οδηγός για Linux στα Ελληνικά

  12. #1572
    Εγγραφή
    06-07-2005
    Περιοχή
    Νέα Υόρκη
    Ηλικία
    46
    Μηνύματα
    9.302
    Downloads
    6
    Uploads
    2
    Τύπος
    Cable
    Ταχύτητα
    70 Mbps down/6 Mbps up
    ISP
    Spectrum
    Παράθεση Αρχικό μήνυμα από pmav99 Εμφάνιση μηνυμάτων
    Μια άλλη επιλογή είναι να ενεργοποιηθεί το set -e. Με τον τρόπο αυτό όποια εντολή επιστρέψει error code το script θα σταματήσει. Επίσης έτσι δεν χρειάζεται να κάνεις chaining με το &&

    https://stackoverflow.com/questions/...-a-bash-script
    Πάντα χρησιμοποιώ το -e. Χωρίς το && όμως δεν θα σταματήσει η αλληλουχία, απλά το ένα script. Η εντολή που έστειλα είναι σε command line, όχι μέσα σε script.

  13. #1573
    Εγγραφή
    06-07-2005
    Περιοχή
    Νέα Υόρκη
    Ηλικία
    46
    Μηνύματα
    9.302
    Downloads
    6
    Uploads
    2
    Τύπος
    Cable
    Ταχύτητα
    70 Mbps down/6 Mbps up
    ISP
    Spectrum
    Θέλω να τρέξω

    Κώδικας:
    ls -lat | head
    ls -lat | tail
    Χωρίς script, υπάρχει τρόπος να το κάνω με μία εντολή; Ασφαλώς δεν περιμένω απάντηση του στυλ

    Κώδικας:
    ls -lat | head && ls -lat | tail

  14. #1574
    Εγγραφή
    14-03-2004
    Μηνύματα
    36
    Downloads
    0
    Uploads
    0
    Ταχύτητα
    102400/10240
    ISP
    Forthnet
    ls -lat | tee >(head) >(tail)

  15. #1575
    Εγγραφή
    06-07-2005
    Περιοχή
    Νέα Υόρκη
    Ηλικία
    46
    Μηνύματα
    9.302
    Downloads
    6
    Uploads
    2
    Τύπος
    Cable
    Ταχύτητα
    70 Mbps down/6 Mbps up
    ISP
    Spectrum
    Παράθεση Αρχικό μήνυμα από billy Εμφάνιση μηνυμάτων
    ls -lat | tee >(head) >(tail)
    Δεν καταλαβαίνω τι εννοείς. Τι είναι το (head) και το (tail) redirect;

Σελ. 105 από 106 ΠρώτηΠρώτη ... 8595100103104105106 ΤελευταίαΤελευταία

Παρόμοια Θέματα

  1. Βοήθεια για ένα απλό bash script
    Από AddictedToChaos στο φόρουμ Unix - Linux
    Μηνύματα: 34
    Τελευταίο Μήνυμα: 22-07-11, 01:57
  2. bash - matlab
    Από simeon.mattes στο φόρουμ Unix - Linux
    Μηνύματα: 25
    Τελευταίο Μήνυμα: 25-06-08, 23:00
  3. Bash Script help (Αρχάριος)
    Από weakwire στο φόρουμ Unix - Linux
    Μηνύματα: 12
    Τελευταίο Μήνυμα: 08-05-07, 00:41
  4. bash rename (mv)
    Από hayzel στο φόρουμ Unix - Linux
    Μηνύματα: 6
    Τελευταίο Μήνυμα: 07-01-07, 16:33

Tags για αυτό το Θέμα

Bookmarks

Bookmarks

Δικαιώματα - Επιλογές

  • Δεν μπορείτε να δημοσιεύσετε νέα θέματα
  • Δεν μπορείτε να δημοσιεύσετε νέα μηνύματα
  • Δεν μπορείτε να αναρτήσετε συνημμένα
  • Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας
  •  
  • Τα BB code είναι σε λειτουργία
  • Τα Smilies είναι σε λειτουργία
  • Το [IMG] είναι σε λειτουργία
  • Το [VIDEO] είναι σε λειτουργία
  • Το HTML είναι εκτός λειτουργίας