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

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


Manos-Sx

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

Ενα απλο one liner που δειχνει γιορτες καθετα ωστε να μπορει να ενσωματωθει ευκολα σε conky, notifications κλπ

 

wget -q -O- http://www.greeknamedays.gr/tools/eortologiorssfeed/index.php?langid=gr | grep -o " : .*" | cut -c 4- | cut -f1 -d"<" | sed 's/\, /\n/g'
  • Like 5
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 2 εβδομάδες αργότερα...
  • Απαντ. 889
  • Δημ.
  • Τελ. απάντηση

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

Αν θυμάμαι καλά, μπορούμε με κάποιο τρόπο να εκτελούμε διαφορετικές εντολές με τα ίδια ορίσματα (; ) χωρίς να τα ξαναγράψουμε.

Τι εννοώ. Να τρέξω πχ:

cmd1 /path/to/a/file

Και μετά χωρίς να ξαναγράψω το αρχείο (ή ότι άλλο), να δώσω απλά:

{μια εντολή; ή ένα σύμβολο;} cmd2

Το οποίο θα μεταφραστεί σε:

cmd2 /path/to/a/file

Καλά θυμάμαι; Πως γίνεται;

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

Μπορείς να κάνεις πολλές μαγκιές αλλά εξαρτάται τι θέλεις και πότε εκτελέστηκε η εντολή

 

Με τα ^^ μπορείς να τρέξεις string substitution αλλά μόνο στην προηγούμενη εντολή

% ls /usr/bin/ar
/usr/bin/ar*

% ^ls^dir
dir /usr/bin/ar
/usr/bin/ar*

% ^ls^dir^
zsh: substitution failed
Όπως βλέπεις την πρώτη φορά που το τρέχω παίζει σωστά ενώ την δεύτερη φορά όχι. Αυτό γίνεται γιατί δουλεύει μόνο με την τελευταία εντολή η οποία δεν έχει πουθενά ls (γιατί άλλαξε προηγουμένως και έγινε dir).

 

Για να δουλέψει και με προηγούμενες καταχωρήσεις στο ιστορικό, μπορείς να χρησιμοποιήσεις το κλασικό !

 

% !ls:s/ls/dir/
dir /usr/bin/ar
/usr/bin/ar*
Το παραπάνω λέει ψάξε στο ιστορικό για την τελευταία εκτέλεση της εντολής ls (το !ls κομμάτι) και έπειτα άλλαξε (το :s) το ls σε dir οπότε θα παίζει ανεξάρτητα από το πόσο παλιά έτρεξες την εντολή cmd1. Στην δική σου περίπτωση θα γινόταν "!cmd1:s/cmd1/cmd2/". Απλά να θυμάσαι ότι αν έχεις τρέξει την cmd1 5 φορές με διαφορετικά ορίσματα, η αλλαγή και η εκτέλεση της cmd2 θα γίνει με το πιο πρόσφατο.

 

% dir !ls:*
dir /usr/bin/ar
/usr/bin/ar*
Το παραπάνω είναι μια παρόμοια μέθοδος που όμως λειτουργεί διαφορετικά. Αντί να τρέξει string substitution πάνω σε μια καταχώρηση του ιστορικού, εσύ δίνεις την εντολή που θέλεις να τρέξεις και απλά του λες να σου φέρει τα ορίσματα μιας προηγούμενης καταχώρησης. Οπότε ψάχνει για την εκτέλεση της εντολής ls, βρίσκει ότι τα ορίσματά της ήταν /usr/bin/ar και στο πετάει στην εντολή dir. Με αυτή τη μέθοδο, το δικό σου θα γινόταν "cmd2 !cmd1:*". Αν δεν θέλεις όλα τα ορίσματα αλλά μόνο κάποιο συγκεκριμένο, μπορείς να γράψεις τον αριθμό του αντί για τον αστερίσκο.

 

Το 2ο είναι λίγο πιο απλό στην σύνταξη. Δοκίμασε τα και δες αν σε βολεύει κάποιο από τα δύο.

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

  • 5 εβδομάδες αργότερα...

Ενα απλο one liner που δειχνει γιορτες καθετα ωστε να μπορει να ενσωματωθει ευκολα σε conky, notifications κλπ

 

wget -q -O- http://www.greeknamedays.gr/tools/eortologiorssfeed/index.php?langid=gr | grep -o " : .*" | cut -c 4- | cut -f1 -d"<" | sed 's/\, /\n/g'

 

Σωραίοςςςςς

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

για long list:

wget -q -O- http://www.greeknamedays.gr/tools/eortologiorssfeed/index.php?langid=gr | grep -o "<description>.*" | tail -n1  | cut -c 14- | cut -f1 -d"<" | sed 's/\, /\n/g'

Δειχνει ετσι

 

Και ενα αλλο, για τον καιρο:

wget -q -O- "http://rss.accuweather.com/rss/liveweather_rss.asp?metric=1&locCode=EUR|GR|LIXOURI" | grep -o "Currently:.*" | cut -c 12- | cut -f1 -d"<"
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Που βρήκες το rss για τον καιρό; Δεν το βρίσκω στο accuweather για να αλλάξω την τοποθεσία. Ας πουμε ότι θέλω αυτό http://www.accuweather.com/en/gr/dafni/176811/current-weather/176811#menu-country

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

  • 1 μήνα μετά...

γρήγορη ερώτηση

 

έχω μια δομή από φακέλους, κάθε φάκελος περιέχει κάποια logs και κάποια scripts

τα scripts χρησιμοποιούν relative paths για να διαβάζουν τα logs και να φτιαχνουν καινούρια αρχεία μέσα στον κάθε φάκελο

αν τρέξω αυτά τα scripts από εξωτερικό script τι γίνεται με τα relative paths?

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

Aν πχ ένα από τα scripts σου με τα relative paths έχει κάτι τέτοιο

#!/bin/bash

touch New_logFile

τότε αυτό τo αρχείο θα δημιουργηθεί στο pwd που θα είσαι όταν εκτελέσεις το εξωτερικό script

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

Μια μπακάλικη μέθοδος είναι πριν τρέξεις το script να μπαίνεις στον κατάλογο που πρέπει.

 

Χωρίς cd

% pwd
/tmp
% cat msg 
Hello
% cat int.sh 
#!/bin/bash
cat ./msg
% cat ext1.sh 
#!/bin/bash
/tmp/int.sh

% ./ext1.sh 
Hello

% cd /
% /tmp/ext1.sh 
cat: ./msg: Δεν υπάρχει τέτοιο αρχείο ή κατάλογος
Ενώ μέσα στο /tmp παίζει σωστά, όταν βγούμε στο / δεν μπορεί να βρει το αρχείο με το relative path.

 

Με cd

% pwd
/
% cat /tmp/ext2.sh 
#!/bin/bash
cd /tmp
/tmp/int.sh

% /tmp/ext2.sh 
Hello

% cat /tmp/ext3.sh 
#!/bin/bash
(
cd /tmp
/tmp/int.sh
)

% /tmp/ext3.sh 
Hello
Το ext2.sh μπαίνει στον κατάλογο /tmp πριν τρέξει το εσωτερικό script οπότε παίζει σωστά. Οι υπόλοιπες εντολές που θα τρέξεις θα έχουν σαν working directory το /tmp αν δεν το αλλάξεις ξανά.

 

Το ext3.sh κάνει το ίδιο ακριβώς πράγμα αλλά το κάνει με πιο δόκιμο τρόπο. Οι παρενθέσεις ορίζουν ότι οι εντολές θα εκτελεστούν σε ένα subshell χωρίς λοιπόν να επηρεάζουν τον υπόλοιπο κώδικα του εξωτερικού script. Αν έβαζα να εκτελεστεί ένα "pwd" στο τέλος, θα βλέπαμε ότι επιστρέφεται σαν working directory το / γιατί το cd έγινε μέσα στο subshell. Με αυτό το τρόπο "απομονώνεις" οτιδήποτε αλλαγές κάνεις για την εκτέλεση του int.sh από τον υπόλοιπο κώδικα.

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

μάλιστα, το ext3 με βολεύει λογικά γιατί μπορώ να τα καλώ όλα από ένα for χωρίς να πρέπει να κάνω κάθε φορα cd πίσω

ευχαριστώ!

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

Ενας gtkdialog τρεχει στο background ενα bash script. Θελω ενα κουμπακι που να σκοτωνει το script και τα παιδια που τρεχει. Κατεληξα σε αυτο:

 

- Το bash script να σωζει το PID του σε ενα temp file

 

- Ο gtkdialog να τρεχει το script με setsid

 

- Οταν πατιεται το κουμπι κανει kill -9 -$(cat temp_αρχειο_με_το_PID)

 

Δουλευει.

 

Γινεται καλυτερα-πιο απλα?

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

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

ένα σκριπτ που έκανα για να φτιάξω τα tags στη μουσική μου γιατί μου είχαν σπάσει τα @@

γενικά όλη μου η μουσική είναι σε φακέλους artist -> album -> filename

από αυτή τη δομή πήρα και έβαλα τα tags

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

#!/bin/bash

find "$1" -iname "*.mp3" -print0 -o -iname "*.wma" -print0 | while IFS= read -r -d $'\0' file; do 
 
  if [ -f "$file" ]
  then
    
    filename="$(readlink -f "$file")"
    base=$(basename "$filename")
    
    title="${base%.mp3}"
    artist="$(echo "$filename" | awk -F'/' '{ print $(NF-2)}')"
    album="$(echo "$filename" | awk -F'/' '{ print $(NF-1)}')"
        
    eyeD3 -b "$artist" -t "$title" -a "$artist" -A "$album" "$file"
    
  fi
  
done

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

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

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

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

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

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

Σύνδεση

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

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