Προς το περιεχόμενο

[INFO] Η δύναμη της Κονσόλας


Manos-Sx

Προτεινόμενες αναρτήσεις

Να 'σαι καλά! Το πρώτο με το echo μου κάνει!

Η αλήθεια είναι ότι και γω κάτι παρόμοιο με αυτό με τις αγκύλες θυμάμαι ότι είχα δει κάπου αλλά όπως το πόσταρες δεν δουλεύει (και δεν κατάλαβα γιατί το αναφέρεις σαν τρόπο που δεν δουλέυει :P ).

PS.
Το workaround με το νέο αρχείο δεν μ' αρέσει γιατί πρέπει να σκεφτείς τι όνομα να του δώσεις, να γράψεις κώδικα για να ελέγξεις αν υπάρχει ήδη τέτοιο αρχείο αλλιώς να του δώσεις άλλο όνομα κτλ...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Απαντ. 889
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Το workaround με το νέο αρχείο δεν μ' αρέσει γιατί πρέπει να σκεφτείς τι όνομα να του δώσεις, να γράψεις κώδικα για να ελέγξεις αν υπάρχει ήδη τέτοιο αρχείο αλλιώς να του δώσεις άλλο όνομα κτλ...

Δεν μπορείς να χρησιμοποιήσεις το pid ? Ονομάζεις το αρχείο file.$$ (το $$ δίνει το τρέχον pid) το οποίο και να υπάρχει ακόμη δεν σε πειράζει να σβηστεί γιατί θα είναι απομεινάρι από κάποια άλλη εφαρμογή (ένα πιθανό πρόβλημα που μου έρχεται στο μυαλό είναι να δημιουργήθηκε κάποιο αρχείο από κάποιο parent process το οποίο σταμάτησε να υπάρχει αλλά το αρχείο να χρησιμοποιείται από κάποιο child το οποίο τρέχει για τόσο αρκετό καιρό ώστε να ξαναχρησιμοποιηθεί το pid του parent για την εφαρμογή σου αλλά κάτι τέτοιο είναι πολύ χλωμό).

 

Να 'σαι καλά! Το πρώτο με το echo μου κάνει!

Δεν σου κάνει. Όπως είπα κανένας από αυτούς τους τρόπους δεν δουλεύει σωστά. Μπορεί να τους πετάξεις 100 εισόδους και να δείχνουν ότι δουλεύουν σωστά και μετά από καιρό και με μια συγκεκριμένη είσοδο να φας ώρες προσπαθώντας να βρεις τι πάει στραβά (χωρίς φυσικά να πάει το μυαλό σου ότι φταίει αυτή η εντολή αφού έπαιζε σωστά).

 

% cat > kk << EOF
> 123
> 234
> \t      
> 345
> 
> EOF
% ls -al kk
-rw-r--r-- 1 test test 16 Μάι  29 20:16 kk
% hexdump -C kk
00000000  31 32 33 0a 32 33 34 0a  5c 74 0a 33 34 35 0a 0a     |123.234.\t.345..|
% md5sum kk
9543c5bed76457a35f05d763f1257246  kk
Όπως βλέπουμε, η 3η γραμμή (μετά το 234) περιέχει τους χαρακτήρες "\t" και στην τελευταία γραμμή πάτησα απλά enter για να εισάγω μια κενή γραμμή.

% echo "$(cat kk)" > kk
% ls -al kk
-rw-r--r-- 1 test test 14 Μάι  29 20:19 kk
% hexdump -C kk
00000000  31 32 33 0a 32 33 34 0a  09 0a 33 34 35 0a        |123.234...345.|
% md5sum kk
71f4f7b511d786bb6d5109a781c63078  kk
Η echo έφαγε την τελευταία κενή γραμμή και επίσης μετέτρεψε τους χαρακτήρες "\t" στο κυριολεκτικό χαρακτήρα TAB (αυτό που βλέπουμε ascii 09). Αν χρησιμοποιήσουμε "echo -E" αντί για σκέτο echo, το αποτέλεσμα είναι λίγο καλύτερο αλλά πάλι υπάρχει corruption σε κάποιες εισόδους.

 

Η μόνη λύση που να παίζει σωστά είναι με το προσωρινό αρχείο.

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ψαχνω ενα pattern για την tar το οποιο να κανει exclude τα περιεχομενα ολων των φακελων σε μια διαδρομη εκτος απο εναν.

 

Δηλαδη ο /koko εχει τους φακελους:

 

1

2

3

 

Θελω να μεινουν στο backup οι 2 3 χωρις τα περιεχομενα τους και ο 1 με τα περιεχομενα του.

 

Δοκιμασα διαφορα:

--exclude=/koko/*/*[^1]

--exclude=/koko/*/[^1]*

--exclude=/koko/*/*[!1]

--exclude=/koko/*/[!1]*

 

αλλα δεν. Καμια ιδεα? Αλλιως θα βαλω να κανει exclude εναν εναν εκτος απο τον 1. Δεν θελω να το κανω με include from file.

 

με --exclude=/koko/*/* μενουν οι 1 2 3 χωρις τα περιεχομενα τους.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Θελω να μεινουν στο backup οι 2 3 χωρις τα περιεχομενα τους και ο 1 με τα περιεχομενα του.

 

Δοκιμασα διαφορα:

--exclude=/koko/*/*[^1]

--exclude=/koko/*/[^1]*

--exclude=/koko/*/*[!1]

--exclude=/koko/*/[!1]*

Το

--exclude=/koko/[!1]/*
δουλεύει ?
  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

ΘΕΟΣ! Thanks!

 

Αν ομως οι φακελοι δεν εχουν για ονομα αριθμο δεν δουλευει

 

πχ φακελοι: test kiki local και κανω

 

--exclude=/koko/[!local]/*

ή

--exclude=/koko/[^local]/*

 

δεν παιζει.

 

Τι πρεπει να αλλαχτει?

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

ΘΕΟΣ! Thanks!

 

Αν ομως οι φακελοι δεν εχουν για ονομα αριθμο δεν δουλευει

 

πχ φακελοι: test kiki local και κανω

 

--exclude=/koko/[!local]/*

ή

--exclude=/koko/[^local]/*

 

δεν παιζει.

 

Τι πρεπει να αλλαχτει?

Φυσικά δεν παίζει :) Το [] δεν κάνει match ένα σετ χαρακτήρων ? Οπότε το [!local] σημαίνει οτιδήποτε δεν είναι "local" ή οτιδήποτε δεν περιέχει τους χαρακτήρες l,o,c,a ?

 

Για να κάνεις match ολόκληρη την λέξη ένας τρόπος είναι να χρησιμοποιήσεις την ίδια μορφή αλλά με παρενθέσεις δηλαδή !(local) αλλά θα χρειαστείς extended globbing σε bash.

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

σε freebsd και sh κάνω generate ενα report με στοιχεία του μηχανήματος όπως temperature, free ram, arp -a και διάφορα άλλα.ποιός είναι ενδεδειγμένος τρόπος για να γίνει όλο σε html και να το στείλω με mail με ssmtp?

 

Προς το παρόν κάνω απο ενα script Echo τις εντολές που θέλω για το mail , αλλά κάποια πράγματα ενω στο script εμφανίζονται σωστα στην html χρειάζονται επιπλέον </br> για να είναι σωστή η εμφάνιση.

 

Συγκεκρινένα ενω το arp -a | awk '{print $2}' αν το εκτελέσω βγάζει ΜΟΝΟ τις IP την  μία κάτω απο την άλλη, αν την κάνω echo την αντίστοιχη εντολή μέσα στο HTML βγάζει τις IP την μια μετά την άλλη στην ίδια σειρά .

 

έψαξα με την cut να αντικαταστήσω το ')' με </br> για να σπάει γραμμή αλλά δε δούλεψε.

 

με ενδιαφέρει είτε να καταφέρω το παραπάνω (δηλαδή με κάποιο τρόπο να τυπώνω IP ανα γραμμή) είτε να υλοποιήσω διαφορετικο reporting system , με καλύτερη εμφάνιση σε html.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Δοκίμασε να βάλεις όλη την έξοδο σε <pre> tag στην html. Το pre tag διατηρεί και τα κενά και τα line breaks.

 

Συνονόματε πολύ χρήσιμο αυτό το tag (δε το γνώριζα),όντως κάνει αυτό που θέλω.

τώρα θέλει να παλέψω με το να φαίνετε σωστά και σε κινητά..

 

 

Ευχαριστώ και πάλι για τη βοήθεια

 

**edit1 πολύ πιο εύκολο απο ότι φανταζόμουν, ένα δείγμα του report (έχουν διαγραφεί κάποιες πληροφορίες)

**edit2 για κάποιο λόγο δε δείχνει σωστά την html στο hotmail με browser αλλα με το κινητό όλα φαίνονται κανονικά

~~~~~~~~~TEMP-INFO~~~~~~~~~~

CPU Temp = 55.0C 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~MEM-INFO~~~~~~~~~~~

real memory  = 1073741824 (1024 MB)
avail memory = 1008111616 (961 MB)
agp0: aperture size is 256M, detected 7932k stolen memory
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~HDD-INFO~~~~~~~~~~~

/dev/ada0s1a     13G    3.2G    8.4G    28%    /
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~TOP-INFO~~~~~~~~~~~

last pid: 4+00:51:14 16:13:03
Mem: 61M 110M Buf,
PID USERNAME WCPU COMMAND
1499 root 2.49% 
44474 root 0.49% 
33476 root 0.49% 
21493 root 0.20% 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~WHO-INFO~~~~~~~~~~~

root             ttyv0        May 31 15:23 
root             pts/0        Jun  4 15:20 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~ARP-INFO~~~~~~~~~~~

Total number of ips =  6
(192.168.1.1)
(192.168.1.2)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~UpTime-INFO~~~~~~~~~

 4:13PM  up 4 days, 51 mins, 2 users, load averages: 0.36, 0.23, 0.18
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~Power-INFO~~~~~~~~~~

On power 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Επεξ/σία από salida
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Η παρακάτω εντολή:

ilias@archpc ~  ➜ echo "mark%3Fop%3Dadd%26bkmk%3D" | sed -r 's/^.*([0-9A-F]{2}).*$/\1/g'
3D
                                                                                                                                                              
ilias@archpc ~  ➜

Θα περίμενα να επιστρέψει το 3F που πιστεύω ότι γίνεται match πρώτο.

Αυτό όμως φαίνεται να επιστρέφει το τελευταίο που κάνει match. Αν σβήσω το 3D στο τέλος του string θα επιστρέψει το 26.

Γιατί συμβαίνει αυτό και πως ακριβώς συμπεριφέρεται ο sed εδώ;

 


Και κάτι ακόμα.
Το ~/mplampla θεωρείται absolute path; (δεν νομίζω)

Προσωπικά έχω την εντύπωση ότι absolute path μπορούμε να θεωρήσουμε μόνο ότι ξεκινάει από την /.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Η παρακάτω εντολή:

ilias@archpc ~  ➜ echo "mark%3Fop%3Dadd%26bkmk%3D" | sed -r 's/^.*([0-9A-F]{2}).*$/\1/g'
3D
                                                                                                                                                              
ilias@archpc ~  ➜
Θα περίμενα να επιστρέψει το 3F που πιστεύω ότι γίνεται match πρώτο.

 

Αυτό όμως φαίνεται να επιστρέφει το τελευταίο που κάνει match. Αν σβήσω το 3D στο τέλος του string θα επιστρέψει το 26.

 

Το πρόβλημα είναι ότι πολλοί τελεστές είναι "greedy" δηλαδή κάνουν match όσους περισσότερους χαρακτήρες μπορούν.

 

Εσύ γράφεις .*(αριθμοί) οπότε λες η τελεία σημαίνει θα κάνει match όποιον χαρακτήρα να ναι, ο αστερίσκος θα επαναλάβει το προηγούμενο match άρα θα κάνω match τα πάντα μέχρι κάποιο 2ψηφιο hex άρα αυτό που έχεις στις παρενθέσεις θα είναι το 3F.

 

Το 3 όμως και το F δεν είναι "οποιοιδήποτε χαρακτήρες" ? Άρα γίνονται και αυτοί match από το .* Το op δεν είναι οποιοιδήποτε χαρακτήρες ?

 

Το .* τρώει όσο παραπάνω μπορεί οπότε κάνει match το mark%3Fop%3Dadd%26bkmk%, η παρένθεση σου κάνει match το 3D και το .* στο τέλος δεν κάνει match τίποτα.

 

mark%3Fop%3Dadd%26bkmk%3D

 

^.*([0-9A-F]{2}).*$

Όταν σβήνεις το 3D, τότε γίνεται πάλι το ίδιο απλά με το bkmk να γίνεται match από το τελευταίο .*

 

 

 

mark%3Fop%3Dadd%26bkmk%

 

^.*([0-9A-F]{2}).*$

 

Για να παίξει όπως το θέλεις, πρέπει να πεις ότι θέλεις non-greedy match το οποίο νομίζω δεν γίνεται στο sed (δεν θυμάμαι όμως στα σίγουρα).

 

Ο τρόπος που χρησιμοποιείται συνήθως είναι να πεις στο sed που να σταματήσει μέσω αντιστροφής δηλαδή εδώ θέλεις να πάρει όσους χαρακτήρες υπάρχουν μέχρι και το πρώτο % και να σταματήσει στον αριθμό δηλαδή μπορείς να του πεις

% echo "mark%3Fop%3Dadd%26bkmk%3D" | sed -r 's/^[^0-9A-F]*([0-9A-F]{2}).*$/\1/g'                                                        
3F
Το [^0-9A-F] σημαίνει οποιοδήποτε χαρακτήρας δεν ανήκει στο παραπάνω σετ και ο αστερίσκος κλασικά επανάληψη του προηγούμενου pattern οπότε σου κάνει match μέχρι το 3 του 3F.
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Σ' ευχαριστώ για άλλη μια φορά.

Δες αν μπορείς να απαντήσεις και στην ερώτηση σχετικά με το absolute path που έκανα edit στο προηγούμενο post μου. Μόλις είδα σε κάποιες σημειώσεις ότι το θεωρεί absolute path. Με την ίδια λογική θεωρείται και το $ΗΟΜΕ/whatever absolute;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...