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

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

Δημοσ.

Έχεις δίκιο.

Υ.Γ:Χρόνια πολλά σε όλους

:)

 

Είναι μερικές συντάξεις εντολών όπως η παραπάνω με την `ls` που σου κολλάνε και τις γράφεις έτσι ενώ ξέρεις ότι είναι περιττές. Ένα από αυτά που την πατάω εγώ είναι το grep. Πάντα θα γράψω "cat αρχείο | grep τάδε" αντί για σκέτο "grep τάδε αρχείο" :)

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

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

Δημοσ.

δοκιμαστε να  ακουσετε ραδιο με τη κονσολα,

με την εντολη mplayer,

και βαλτε μετα ip,

του σταθμου,

και θα ξετρελαθειτε με το τι μπορει να κανει,

αυτο το unixaki

Δημοσ.

μαλλον δεν το εξήγησα καλά

θελω να βαλει απόστροφο σε ολα το files 'file' οπως και στο checksum

 

thanks again

βασικά είναι περίπου αυτό αλλά με ~1000 fonts από κάτω και έχασα το PKGBUILD :cry:

 

https://aur.archlinux.org/packages/tt/ttf-win7-fonts/PKGBUILD

με sed

Δημοσ.

Ως γνωστόν με $1, $2 κτλ εμφανίζω το αντίστοιχο cla. Έστω ότι έχω μια μεταβλητή με όνομα a και τιμή 2. Το "echo $a" προφανώς θα εμφανίσει την τιμή της μεταβλητής a. Υπάρχει τρόπος να εμφανίσω το 2ο argument με κάποιον τρόπο όταν το 2 είναι αποθηκευμένο σε μεταβλητή;

Δημοσ.

Ως γνωστόν με $1, $2 κτλ εμφανίζω το αντίστοιχο cla. Έστω ότι έχω μια μεταβλητή με όνομα a και τιμή 2. Το "echo $a" προφανώς θα εμφανίσει την τιμή της μεταβλητής a. Υπάρχει τρόπος να εμφανίσω το 2ο argument με κάποιον τρόπο όταν το 2 είναι αποθηκευμένο σε μεταβλητή;

% export LL=2
% ga() {
> echo ${!LL}
> }
% ga

% ga mitsos kotsos
kotsos
% export LL=1     
% ga mitsos kotsos
mitsos
Με άλλα λόγια τρέχεις ${!όνομα_μεταβλητής} και το αποτέλεσμα θα είναι σαν να είχες τρέξει ${τιμή_της_μεταβλητής}
Δημοσ.

Ευχαριστώ πολύ!

Τελικά ανακάλυψα και την shift που είναι πιο βολική σ' αυτό που θέλω να κάνω, αλλά και το παραπάνω είναι χρήσιμο για μελλοντική χρήση.

  • 2 εβδομάδες αργότερα...
Δημοσ.

Καλησπέρα,

 

Έχω μια ιδέα (αν το κάνω θα το ανεβάσω σε κάποιο repository for free):

 

"να φτιάξω ένα απλό gui για κάθε μια εντολή του bash shell"

 

1) ναι ξέρω με μια πρώτη όψη φαίνεται χαζό, καλύτερα να κάτσει κάποιος να το εκτελέσει από terminal αλλά για μερικούς dummy χρήστες μπορεί να είναι χρήσιμο.

 

ερωτήματα και προβληματισμοί μου:

 

2) ξέρει κάποιος να μου πει αν υπάρχει κάποια δομή στα commands του bash shell? ωστε να παίρνω :

α) την περιγραφή της εντολής

β) απαραίτητα arguments της εντολής,

γ) και τις ιδιότητες τους (αρχεία),

 

ωστε να εμφανίζω κατάλληλα gui elements (check box για parameters, text area και button για επιλογή αρχείου, text area για την περιγραφή κτλπ κτλπ )

 

Ακούω ιδέες... 

Ευχαριστώ

Δημοσ.

Καποτε ξεκινησα να φτιαξω κατι σαν control center  για το openbox μου. Για να ειναι ολα συμμαζεμενα αλλα το παρατησα.

#!/bin/bash
echo "  	                            Edit system files"
#  
echo
select i in   "sources.list?" "fstab?"   "Quit"
do
case $i in
"sources.list?")
medit /etc/apt/sources.list;;
"fstab?")
medit /etc/fstab
;;
"Quit") echo "Bye $USER" all its ok... ; exit;;
esac
done

Χρησιμο ειναι ξεκινα το.

Παντως υπαρχει κατι αναλογο Link.png Site: cli companion

  • 3 εβδομάδες αργότερα...
Δημοσ.

Έχω ένα αρχείο το οποίο περιέχει μερικές κενές γραμμές και θέλω να τις σβήσω. Προσπαθώ να κάνω κάτι τέτοιο:

cat file.txt | tr -s '\n' > file.txt

Το αρχείο που παίρνω τελικά όμως είναι κενό.

Νομίζω ότι αυτό συμβαίνει γιατί το piping λειτουργεί παράλληλα και την ώρα που διαβάζω το αρχείο ταυτόχρονα πάω να γράψω και σ' αυτό οπότε σβήνονται τα περιεχόμενα του και η cat διαβάζει ένα κενό αρχείο. Αν μπορεί ας επιβεβαιώσει κάποιος ότι όντως αυτό συμβαίνει.

Τελικά πως μπορώ να λύσω το πρόβλημα, ώστε να πετύχω αυτό που θέλω; Δοκίμασα με grouping χρησιμοποιώντας παρενθέσεις αλλά δεν δούλεψε.

Δημοσ.
grep -v '^$' file.txt | sponge file.txt

το προβλημα σου ειναι οτι εχεις input και output το ιδιο αρχειο, γιαυτο εχεις μετα κενο αρχειο... το sponge το διορθωνει αυτο (αλλα μαλλον θα πρεπει να εγκαταστησεις το moreutils)

Δημοσ.

Ευχαριστώ για την απάντηση, αλλά το sponge όντως δεν υπάρχει στο σύστημα μου by default. Μήπως υπάρχει κάποια εναλλακτική με κάποιο shell built-in ή κάποια άλλη εντολή;

Το να δημιουργήσω ένα δεύτερο αρχείο και να το μετονομάσω μετά δεν μ' αρέσει σαν workaround.

Δημοσ.

http://www.cyberciti.biz/faq/using-sed-to-delete-empty-lines/

sed -i '/^$/d' file.txt

Το ^$ κάνει match το τίποτα (αρχή-τέλος χωρίς κάτι ενδιάμεσα), με το d τα σβήνεις και το i κάνει inline replacement.

 

ή αν έχεις tabs/spaces http://stackoverflow.com/a/16414489/2137281

sed -i '/^\s*$/d' file.txt

που σημαίνει ξεκινάει (^) με whitespace character (\s) μία ή περισσότερες φορές (*) και τελειώνει εκεί ($).

  • Like 1
Δημοσ.

Ευχαριστώ ξανά αλλά και πάλι εδώ πέρα όλη τη δουλειά την κάνει το -i στον sed.

Στην πραγματικότητα δεν με νοιάζει το να αδειάσω τις κενές γραμμές από ένα αρχείο, ξέρω διάφορους τρόπους να το κάνω.

Αυτό που με ενδιαφέρει πραγματικά είναι γενικά το φιλτράρισμα με οποιαδήποτε φίλτρα-εντολές έχοντας σαν stdin και stdout το ίδιο αρχείο. Ένα general case.

(cat file | filtercmd params | filtercmd params | filtercmd parms) > file
Δημοσ.

Ευχαριστώ ξανά αλλά και πάλι εδώ πέρα όλη τη δουλειά την κάνει το -i στον sed.

 

Στην πραγματικότητα δεν με νοιάζει το να αδειάσω τις κενές γραμμές από ένα αρχείο, ξέρω διάφορους τρόπους να το κάνω.

 

Αυτό που με ενδιαφέρει πραγματικά είναι γενικά το φιλτράρισμα με οποιαδήποτε φίλτρα-εντολές έχοντας σαν stdin και stdout το ίδιο αρχείο. Ένα general case.

(cat file | filtercmd params | filtercmd params | filtercmd parms) > file

 

 

Το άνοιγμα του αρχείου για το redirection θα γίνει πρώτα για αυτό τα δεδομένα του δεν υπάρχουν όταν πάει να τρέξει το cat. Για να μην σβήνεται το αρχείο πρέπει να χρησιμοποιήσεις μια μορφή που να αναγκάζει το shell να τρέξει πρώτα το κομμάτι των εντολών.

% echo "$(cat file | filtercmd blah blah)" > file
Ένας τρόπος για να το κάνεις είναι ο παραπάνω. Το κομμάτι του $() αναγκαστικά θα τρέξει πρώτο και μετά με την βοήθεια του echo πετάς την έξοδο στο ίδιο αρχείο. Άλλος τρόπος είναι με την χρήση αγκύλων {} και το στυλ { filtercmd blah blah > file } < file και υπάρχουν πολλοί ακόμη τρόποι που όλοι όμως έχουν ένα κοινό. Δεν δουλεύουν σωστά.

 

Ο μόνος δόκιμος τρόπος είναι να χρησιμοποιήσεις ένα προσωρινό αρχείο πχ όπως φαίνεται παρακάτω.

cat file | filtercmd params | filtercmd params | filtercmd parms > file.out && mv file.out file
  • Like 1

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

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

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

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

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

Σύνδεση

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

Συνδεθείτε τώρα
  • Δημιουργία νέου...