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

Περίεργη συμπεριφορά του bash


inle

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

Καλησπέρα. Πρόσφατα παρατήρησα ένα μικρό bug όταν τρέχω εντολές. Το error message που παίρνω είναι του bash. Εν ολίγοις, τρέχω απλές εντολές τύπου ls , cd κτλ, αλλά παίρνω το παρακάτω error message. Αυτό γίνεται 1 ή 2 φορές, και έπειτα τρέχει κανονικά η εντολή. Δεν εμφανίζεται πάντα δηλαδή.

Επειδή το error message είναι του bash έβαλα παρακάτω το .bashrc αρχείο μου. Δεν είναι τίποτα σπουδαίο, απλά μερικά alias και μια αλλαγή του PS1 για να έχει χρώμα (υποψιάζομαι, όμως, ότι ίσως αυτό προκαλεί το πρόβλημα).  Δεν ζητώ απεγνωσμένα λύση, αφού δεν ειναι κάτι που επηρεάζει σοβαρά την λειτουργία του υπολογιστή μου. Απλώς σκέφτηκα ότι μπορεί κάποιος να έχει μια ιδέα του τί συμβαίνει.
Θα δοκιμάσω να αλλάξω το .bashrc, απλά επειδή το προβλημα εφανίζεται φαινομενικά τυχαία, χρειάζομαι λίγο χρόνο μέχρι να είμαι σίγουρος ότι φταίει αυτό.

Παράδειγμα του error message (η τρίτη εκτέλεση είναι επιτυχής) :

weird.png.01aeda1d0c5796931abaa94a235aa508.png

Το αρχείο .bashrc που χρησιμοποιώ:

#
# ~/.bashrc
#

# If not running interactively, don't do anything
[[ $- != *i* ]] && return

# Run ls with color options
alias ls='ls --color=auto'

# Format PS1
PS1='[\[email protected]\h \W]\$ '

### COLOR for PS1
export PS1="\[\e[01;32m\][\[\e[m\]\[\e[01;31m\]\u\[\e[m\]\[\e[01;33m\]@\[\e[m\]\[\e[01;32m\]\h\[\e[m\]:\[\e[01;36m\]\w\[\e[m\]\[\e[01;32
m\]]\[\e[m\]\[\e[01;35m\]\\$\[\e[m\] "

### alias for youtube-dl
alias youtube-dl='youtube-dl -x --embed-thumbnail --audio-format mp3'

### alias for shutdown
alias shutdown='shutdown --no-wall'

Οποιαδήποτε ιδέα είναι καλοδεχούμενη! Ευχαριστώ.

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Δοκιμασε να βγαλεις τα χρωματα στο ps1 για αρχη και μετα δοκιμασε με το στοκ ps1 να δεις αν στο κανει.

  • Like 1
Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
Δημοσ. (επεξεργασμένο)
4 ώρες πριν, jim_p είπε

Δοκιμασε να βγαλεις τα χρωματα στο ps1 για αρχη και μετα δοκιμασε με το στοκ ps1 να δεις αν στο κανει.

Μετά από ένα μισάωρο χρήσης, φαίνεται να ήταν αυτό το πρόβλημα. Κρίμα, γιατί μου άρεσαν τα χρώματα.

Αν κάποιος γνωρίζει bash και μπορεί να διακρίνει για ποιο λόγο μπορεί να προκαλείται αυτό το πρόβλημα, θα βοηθούσε πολύ. Είμαι πολύ περίεργος. Έχω κάποιες ιδέες, αλλά καμία δεν με ικανοποιεί.

Update

Δυστυχώς, το πρόβλημα επιμένει. Από τη μια χαιρομαι επειδή μπορώ να κρατήσω τα χρώματα. Απ'την άλλη είμαι εντελώς χαμένος πλέον. Ξαναλέω, δεν είναι κάτι τρομερά σοβαρό, απλά θα ήθελα να το κατανοήσω. Όποιος έχει ιδέα, είναι ευπρόσδεκτη!

Το ίδιο πρόβλημα εμφανίζεται ενώ έβγαλα τις αλλαγές του PS1 (άρα χωρίς χρώμα και format) :

bad.png.0bc47a2209bcfb3b12994c33596e9bee.png

 

Επεξ/σία από inle
τυπογραφικά λάθη
Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
39 λεπτά πριν, inle είπε

Το ίδιο πρόβλημα εμφανίζεται ενώ έβγαλα τις αλλαγές του PS1

Εκλεισες/ανοιξες το τερματικο να παρει τις αλλαγες? Ή αν βαριεσαι το ανοιγοκλεισμα , τραβα ενα source .bashrc. 

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
Δημοσ. (επεξεργασμένο)
3 ώρες πριν, jim_p είπε

Μηπως εχεις κατι ακομα που πηδαει το ps1? Αν δωσεις ενα 

echo $PS1

τι σου βγαζει?

Μου βγάζει το παρακάτω, ενώ έχω αφαιρέσει το χρώμα και το δικό μου formatting από το .bashrc.

[\u@\h \W]\$
4 ώρες πριν, mphxths είπε

Εκλεισες/ανοιξες το τερματικο να παρει τις αλλαγες? Ή αν βαριεσαι το ανοιγοκλεισμα , τραβα ενα source .bashrc.

Ναι, φυσικά. Έκλεισα και άνοιξα το τερματικό, γι'αυτό εξάλλου δεν υπάρχει το χρώμα στο δεύτερο screenshot.

Update

Παιδιά, το βρήκα. Είναι πάρα πολύ περίεργο, και δεν ξέρω πώς να το εξηγήσω. Θα προσπαθήσω να το εξηγήσω όσο καλύτερα μπορώ για όποιον ενδιαφέρεται.

Λοιπόν, τρέχω ArchLinux (by the way I use Arch) με awesomeWindowManager. Για να μπορώ να αλλάζω το πληκτρολόγιο από αγγλικά σε ελληνικά έχω μπει στο rc.lua και έχω προσθέσει δύο εντολές τις οποίες θα παραθέσω παρακάτω. Το rc.lua είναι το configuration file του awesomewm και (όπως είνα προφανές) είναι γραμμένο σε lua.

Οι εντολές που πρόσθεσα είναι οι εξής:

-- Language keybindings for GREEK and ENGLISH (us)
    awful.key({}, "XF86MonBrightnessDown", function () awful.util.spawn_with_shell("setxkbmap us") end,
              {description = "switches to us lang"}),
    awful.key({}, "XF86MonBrightnessUp", function () awful.util.spawn_with_shell("setxkbmap gr") end,
              {description = "switches to gr lang"}),

Αυτό ουσιαστικά τρέχει την εντολή setxkbmap us ( αγγλικό πληκτρολόγιο ) όταν πατάω ένα πλήκτρο. Αντίστοιχα η άλλη εντολή γυρνάει το πληκτρολόγιο στα ελληνικά.

Τα παραπάνω είναι σημαντικά διότι το bug αφορά ελληνικούς χαρακτήρες. Ξαναλέω, είναι περίεργο bug, οπότε θα το εξήγησω όσο καλύτερα μπορώ.
Έστω ότι ανοίγω το τερματικό και γράφω "ωvim file.txt". Αυτό προφανώς δεν θα τρέξει, οπότε σβήνω το ωμέγα και το τρέχω. Το πρόβλημα είναι ότι η παρουσία του ελληνικού χαρακτήρα φαίνεται να σβήνει ένα χαρακτήρα του bash prompt! Αν πατήσω το πάνω βέλος και το κάτω βέλος πολλές φορές, τότε η εντολη θα εξαφανιστεί και θα εμφανιστεί πολλές φορές. Κάθε φορά που το κάνω, ομως, σβήνεται και ένα γράμμα του prompt. Παράδειγμα:

super-weird.png.31647f5cbbcf3455a7f1c7b5134722bd.png

Δεν έχω ιδέα γιατί γίνεται αυτό. Απ'ότι κατάλαβα, όταν ξεχαστώ και γράψω στο prompt με ελληνικούς χαρακτήρες, τότε προκαλώ αυτό το bug. Ακόμα και αν σβήσω τον ελληνικό χαρακτήρα, η ζημιά έχε γίνει και θα μου πετάξει error. Πρέπει να κάνω restart το τερματικό για να διορθωθεί. Πολύ περίεργο...

Κάτι δεν μου κολλάει πάντως, αλλά τεσπα. Όποιος έχει άλλη ιδέα, ευπρόσδεκτη!

edit: Παρεπιμπτόντως, τα 'c' που βλέπετε στο screenshot δεν είναι δικά μου. Κάθε φορά που σβήνεται ένας χαρακτήρας του prompt, φαίνεται ότι το τελευταίο γράμμα τις εντολής πολλαπλασιάζεται. Όπως είπα, περίεργο...

Επεξ/σία από inle
τυπογραφικά λάθη
Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Δεν έγραψες τι διανομή και έκδοση τρέχεις (για να μπορούμε να έχουμε μια ιδέα τι πράγματα έχουν τα default bash_profile, bashrc, κτλ) και επίσης τι locale τρέχεις.

Το πρόβλημα φαινόταν ότι είχε σχέση με Ελληνικούς χαρακτήρες αλλά φυσικά δεν θα μπορούσε να πάει το μυαλό μας σε αυτό με τη lua. Τα ζεύγη 316,217 και 317,211 σε οκταδικό είναι αντίστοιχα CE8F και CF89 σε δεκαεξαδικό τα οποία παραπέμπουν στο Ελληνικό range σε UTF-8 (λ και ω αντίστοιχα).

Όταν έχεις Ελληνικά και βλέπεις το backspace να σβήνει περισσότερους χαρακτήρες από ό,τι πρέπει, στο 99% των περιπτώσεων είναι μπέρδεμα της readline (λάθος επιλογές στο /etc/inputrc το οποίο εδώ και χρόνια οι διανομές το έχουν στημένο τέλεια και δεν το πειράζει κανείς) ή μπέρδεμα με τις αγκύλες στο prompt. Οι escaped αγκύλες δηλώνουν ότι αυτό που ακολουθεί δεν είναι printable ώστε να ξέρει το bash τι να κάνει. Αν κάπου έχεις λάθος αριθμό αγκύλων (πχ ανοίγεις μία και δεν την κλείνεις), τότε δημιουργούνται τέτοια θέματα.

Αν δεν χάλασε κάτι το copy-paste, το prompt σου δείχνει να δουλεύει σε εμένα. Ένα χαζό που έχω να προτείνω είναι να αλλάξεις τα διπλά εισαγωγικά σε μονά δηλαδή το:

### COLOR for PS1
export PS1="\[\e[01;32m\][\[\e[m\]\[\e[01;31m\]\u\[\e[m\]\[\e[01;33m\]@\[\e[m\]\[\e[01;32m\]\h\[\e[m\]:\[\e[01;36m\]\w\[\e[m\]\[\e[01;32m\]]\[\e[m\]\[\e[01;35m\]\\$\[\e[m\] "

να γίνει

### COLOR for PS1
export PS1='\[\e[01;32m\][\[\e[m\]\[\e[01;31m\]\u\[\e[m\]\[\e[01;33m\]@\[\e[m\]\[\e[01;32m\]\h\[\e[m\]:\[\e[01;36m\]\w\[\e[m\]\[\e[01;32m\]]\[\e[m\]\[\e[01;35m\]\\$\[\e[m\] '

  • Thanks 1
Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
3 ώρες πριν, imitheos είπε

Δεν έγραψες τι διανομή και έκδοση τρέχεις (για να μπορούμε να έχουμε μια ιδέα τι πράγματα έχουν τα default bash_profile, bashrc, κτλ) και επίσης τι locale τρέχεις.

Distro: ArchLinux
Release: rolling

Locale:

LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

Localectl:

System Locale: LANG=en_US.UTF-8
       VC Keymap: n/a
      X11 Layout: n/a

Τα υπόλοιπα που έγραψες θέλω να τα χωνέψω, να ασχοληθω λίγο περισσότερο.

Αναφορά σε κείμενο

Όταν έχεις Ελληνικά και βλέπεις το backspace να σβήνει περισσότερους χαρακτήρες από ό,τι πρέπει[...]

Δεν συμβαίνει ακριβώς αυτο. Οι χαρακτήρες του prompt σβήνονται μονο από την παρουσία του ελληνικού γράμματος. Σαν να καταπίνονται κάθε φορά που χρησιμοποιώ το buffer του terminal για να επαναφέρω μια εντολή που περιέχει ελληνικό γράμμα. Backspace δεν πατάω.

Όταν τρέξεις εντολή, μετά μπορείς να την ξαναεπαναφέρεις πατώντας το επάνω βέλος. Αυτο κάνω και εγώ για να επαναφέρω την εντολή που ξεκινάει με το ωμέγα, και κάθε φορά που εμφανίζεται στο prompt μου τρώει ένα γράμμα.

Αυτό που μου πρότεινες με τα μονά εισαγωγικα το δοκίμασα, αλλά το φαινόμενο παραμένει. Δοκίμασα, επίσης, να αφαιρέσω όλες τις αλλαγές που έκανα στο PS1, αλλά το πρόβλημα παραμένει. Άρα δεν νομίζω να φταίει αυτό. Εν πάσει περιπτώσει, θα μελετήσω τα υπόλοιπα που έγραψες και αν βρω κάτι θα το ποστάρω. Ευχαριστώ!

 

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
Δημοσ. (επεξεργασμένο)

Όλα τα UTF-8 locales θα πρέπει να λειτουργούν σωστά αλλά δοκίμασε αν θέλεις "export LANG=el_GR.UTF-8" (για την ακρίβεια το CTYPE διέπει αυτή τη λειτουργία αλλά για ευκολία εσύ πείραξε το LANG) και δες αν κάνει διαφορά.

Edit: Δεν είναι του παρόντος αλλά αφού φτιάξεις αυτό το πρόβλημα, μια και βλέπω ότι δεν έχεις ορίσει X11 Layout, αντί να πειράζεις το rc.lua του awesome, μπορείς να ορίσεις τα layouts σε ένα αρχείο του X11. Ο πιο εύκολος τρόπος είναι με το localectl το οποίο θα σου δημιουργήσει ένα αρχείο 00-keyboard.conf ή κάτι τέτοιο. Αυτό έχει το καλό ότι θα έχει την ίδια συμπεριφορά σε όλους τους window managers (εκτός από κάποιους βλαμμένους που δεν το τηρούν και το κάνουν override με τα δικά τους settings)

Επεξ/σία από imitheos
Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
Δημοσ. (επεξεργασμένο)
3 ώρες πριν, imitheos είπε

Όλα τα UTF-8 locales θα πρέπει να λειτουργούν σωστά αλλά δοκίμασε αν θέλεις "export LANG=el_GR.UTF-8" (για την ακρίβεια το CTYPE διέπει αυτή τη λειτουργία αλλά για ευκολία εσύ πείραξε το LANG) και δες αν κάνει διαφορά.

Edit: Δεν είναι του παρόντος αλλά αφού φτιάξεις αυτό το πρόβλημα, μια και βλέπω ότι δεν έχεις ορίσει X11 Layout, αντί να πειράζεις το rc.lua του awesome, μπορείς να ορίσεις τα layouts σε ένα αρχείο του X11. Ο πιο εύκολος τρόπος είναι με το localectl το οποίο θα σου δημιουργήσει ένα αρχείο 00-keyboard.conf ή κάτι τέτοιο. Αυτό έχει το καλό ότι θα έχει την ίδια συμπεριφορά σε όλους τους window managers (εκτός από κάποιους βλαμμένους που δεν το τηρούν και το κάνουν override με τα δικά τους settings)

Δοκίμασα το export LANG=el_GR.UTF-8. Έγινε η αλλαγή (προφανώς μόνο για το συγκεκριμένο session) αλλά το φαινόμενο παραμένει. Δηλαδή, με το el_GR.UTF-8 παραμένει η περίεργη συμπεριφορά του prompt όταν υπάρχουν ελληνικοί χαρακτήρες. Θέλω να εξοικειωθώ περισσότερο με τα locales γενικότερα, οπότε θα ασχοληθώ παραπάνω.

Αυτό που είπες για το X11 έπρεπε να το έχω κάνει κανονικά, αλλά το αγνόησα και μετά το ξέχασα 😇 Θα το τσεκάρω, και θα συνεχίσω να ψάχνω για το άλλο θέμα.

Επεξ/σία από inle
τυπογραφικά λάθη
Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

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

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

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

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

Εγγραφείτε για έναν νέο λογαριασμό

Σύνδεση

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

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

Με την περιήγησή σας στο insomnia.gr, αποδέχεστε τη χρήση cookies που ενισχύουν σημαντικά την εμπειρία χρήσης.