Λίγο καιρό πίσω, αναφέραμε 8 χρήσιμες και ενδιαφέρουσες προσεγγίσεις μπάσων. Αυτό αποδείχθηκε ένα από τα πιο δημοφιλή άρθρα μας και εξακολουθεί να δημιουργεί ανταπόκριση χρήστη και ανατροφοδότηση. Αυτή τη φορά βρήκαμε μερικούς περισσότερους πολύτιμους λίθους, καθώς και μερικές χρήσιμες συμβουλές και κόλπα για να έχουμε το πιο δροσερό μήνυμα κηδείας στο παροιμιώδες μπλοκ.

Χρησιμοποιώντας αυτά τα ερωτήματα

Ορισμένα από τα παρακάτω μηνύματα είναι γραμμένα με ένα καπάκι και μπορούν να επικολληθούν απευθείας στο τερματικό σας για προσωρινή χρήση. Για να τα καταστήσετε μόνιμα, θα πρέπει να επικολλήσετε τον κώδικα στο .bashrc ή .bash_profile .

Οι μεγαλύτερες, πιο σύνθετες προτροπές, όπως το Twtty, πρέπει να αποθηκευτούν στο δικό τους αρχείο σεναρίων (όπως το myprompt.sh) και να τοποθετήσετε μια γραμμή όπως

 πηγή myprompt.sh 

στο αρχείο .basrc για να τα εισαγάγετε.

Twtty Prompt

Πρόκειται για μια προτροπή δύο γραμμών που περιέχει αρκετές πληροφορίες, όπως όνομα χρήστη, όνομα κεντρικού υπολογιστή, κατάλογο εργασίας, ώρα και αριθμός ιστορικού εντολών. Λόγω της τεχνικής και οπτικής πολυπλοκότητας, είναι καλύτερο να τοποθετήσετε αυτό το προτρεπτικό σενάριο στο δικό του αρχείο και στη συνέχεια να το εξάγετε από το αρχείο .bashrc ή .bash_profile όπως περιγράφεται παραπάνω.

 συνάρτηση prompt_command {TERMWIDTH = $ {COLUMNS} # Υπολογίστε το πλάτος της εντολής: hostnam = $ (echo -n $ HOSTNAME | sed -e "s /[\.].*//") # "whoami" και "pwd "include newline usineram = $ (whoami) cur_tty = $ (tty | sed -e" s /.* tty \ (. * \) / \ 1 / "newPWD =" $ {PWD} "# τα αξεσουάρ παρακάτω ... αφήστε promptsize = $ (echo -n "- ($ {usernam} @ $ {hostnam}: $ {cur_tty}) --- ($ {PWD} tr -d "") ας συμπληρώσετε = $ {TERMWIDTH} - $ {promptsize} fill = "" ενώ "[fillsize" -gt "0"] fill = } -1 γίνεται αν ["$ fillsize" -lt "0"] τότε ας κόψουμε = 3 - $ {fillsize} newPWD = "... $ (echo -n $ PWD | sed -e" s / \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 033 [0; 37m \] "τοπικό WHITE =" \ [\ 033 [1; 37m \] "τοπικό NO_COLOUR =" \ [033 [0m \] τοπικό LIGHT_BLUE = "\ ] "τοπικό YELLOW =" \ [\ 033 [1; 33m \] "περίπτωση $ TERM στο xterm *) TITLEBAR = '\ [033] 0; \ u @ \ h: \ w \ 007 \ *) TITLEBAR = "" ;; esac PS1 = "$ TITLEBAR \ $ YELLOW - $ LIGHT_BLUE - ($ $ YELLOW \ $ usernam $ LIGHT_BLUE @ $ YELLOW \ $ hostnam $ LIGHT_BLUE: $ WHITE \ $ cur_tty \ $ {LIGHT_BLUE} {fill} $ {LIGHT_BLUE} - (\ $ YELLOW \ $ {newPWD} \ $ LIGHT_BLUE) - $ YELLOW- \ \ n \ $ YELLOW- $ LIGHT_BLUE - LIGHT_BLUE: $ WHITE \ $ NO_COLOUR "PS2 =" $ LIGHT_BLUE- $ LIGHT_BLUE: $ YELLOW \ $ (Ημερομηνία \ "+% a, % d% b% y \") \ $ LIGHT_BLUE: $ WHITE \ $ LIGHT_BLUE ΚΙΤΡΙΝΟ- $ ΚΙΤΡΙΝΟ- $ NO_COLOUR "} 

Ένα σημαντικό πράγμα που πρέπει να σημειώσετε σχετικά με αυτή την ερώτηση είναι ότι η οριζόντια γραμμή ζυγίζει για να ταιριάζει στο πλάτος του τερματικού σας, και ότι η γραμμή του καταλόγου εργασίας θα περικόψει τον εαυτό της όταν γίνει πολύ μεγάλο.

Αν έχετε προβλήματα με το παραπάνω απόσπασμα κώδικα, μπορείτε να κατεβάσετε εδώ την απλή έκδοση κειμένου.

Υψηλής απόδοσης μινιμαλιστική γραμμή

Όλες οι πολυπλοκότητες μιας φανταχτικής προτροπής, όπως το Twtty, καταλαμβάνουν περισσότερους κύκλους CPU και παρόλο που σίγουρα δεν πρόκειται να αλέσει το σύστημά σας να σταματήσει, μπορεί να προσθέσει επάνω. Αν θέλετε κάτι που πακετάρει πολλές πληροφορίες χωρίς να σας επιβραδύνει, προτείνω αυτό:

 PS1 = "[\ d | \ T -> \ w ... \ $?] \ N #" 

Ένα ενδιαφέρον πράγμα που πρέπει να σημειωθεί εδώ είναι η χρήση της μεταβλητής $; στο τέλος. Αυτό υποδηλώνει την κατάσταση εξόδου της τελευταίας εντολής που καταχωρίσατε. 0 σημαίνει ότι όλα είναι καλά, οποιοσδήποτε άλλος αριθμός δείχνει συνήθως ένα σφάλμα.

Προτροπή του Rob

Αυτή είναι μια από τις πιο δημοφιλείς προτροπές που διακινούνται γύρω από το Διαδίκτυο. Ο κώδικας είναι μικρός και απλός, ωστόσο δίνει πολλά από τα χαρακτηριστικά που υπάρχουν στα μεγαλύτερα, πιο σύνθετα παραδείγματα.

 PS1 = "\ [\ 033 [0; 33m \] [\!] \` Αν [[\ $? = "0"]] "\\ [\\ 033 [31m \\]" \ fi [\ u \ h: \ `αν [[pwd | wc -c | tr -d" "` \\ W "; else echo" \\ w "; fi \"] \ $ \ [\ 033 [0m \] "; echo -ne "\ 033] 0; 'hostname -s`:` pwd` \ 007 " 

MegaFancyPrompt

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

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

 COLOR_WHITE = '\ 033 [1; 37m' COLOR_LIGHTGRAY = '033 [0; 37m' COLOR_GRAY = '\ 033 [1; 30m' COLOR_BLACK = '\ 033 [0; 30m' COLOR_RED = '\ 033 [0; 31m' COLOR_LIGHTRED = '033 [1; 31m' COLOR_GREEN = '\ 033 [0; 32m' COLOR_LIGHTGREEN = '\ 033 [1; 32m' COLOR_BROWN = '\ 033 [0; 33m' COLOR_YELLOW = '\ 033 [1; = '\ 033 [0; 34m' COLOR_LIGHTBLUE = '\ 033 [1; 34m' COLOR_PURPLE = '\ 033 [0; 35m' COLOR_PINK = '\ 033 [1; 35m' COLOR_CYAN = '\ 033 [0; 36m' COLOR_LIGHTCYAN = '\ 033 [1; 36m' COLOR_DEFAULT = '\ 033 [0m' # Λειτουργία για τη ρύθμιση prompt_command στο. η συνάρτηση promptcmd () {history -a τοπική SSH_FLAG = 0 τοπική TTY = $ (tty | awk -F / dev / '{print $ 2}') αν [[$ {TTY}]]; τότε το τοπικό SESS_SRC = $ (που | grep "$ TTY" | awk '{print $ 6}') fi # Τίτλος γραμμής $ {TERM} σε xterm *) τοπικό TITLEBAR = '\ [033] 0; \ u @ \ h : {\ w} \ 007 \] '; *) τοπικό TITLEBAR = '' ;; esac PS1 = "$ {TITLEBAR}" # Δοκιμή για αλλαγή ημέρας. αν [-Z $ DAY]; τότε εξαγωγή DAY = $ (ημερομηνία +% A) άλλο τοπικό σήμερα = $ (ημερομηνία +% A) εάν ["$ {DAY}"! = "$ {today}"]; τότε η τιμή PS1 = "$ {PS1} \ n \ [$ {COLOR_GREEN} \] Ημέρα άλλαξε σε $ (ημερομηνία '+% A, % d% B% Y'). εάν [$ {UID} -eq 0]. τότε αν "[$ {USER}" == "$ {LOGNAME}"); τότε αν [[$ {SUDO_USER}]]; τότε PS1 = "$ {PS1} \ [$ {COLOR_RED} \] \ u" αλλιώς PS1 = "$ {PS1} \ [$ {COLOR_LIGHTRED} \] {COLOR_YELLOW} \] \ u "αλλ 'αν [$ {USER} == $ {LOGNAME}]; τότε PS1 = "$ {PS1} \ [$ {COLOR_GREEN} \] \ u" αλλιώς PS1 = "$ {PS1} \ [$ {COLOR_BROWN} \] n "$ http_proxy"]. τότε PS1 = "$ {PS1} \ [$ {COLOR_GREEN} \] @" αλλιώς PS1 = "$ {PS1} \ [$ {COLOR_LIGHTRED} \] @" fi # Host αν [[$ {SSH_CLIENT}] | [[$ {SSH2_CLIENT}]]. τότε SSH_FLAG = 1 fi αν [$ {SSH_FLAG} -eq 1]; τότε PS1 = "$ {PS1} \ [$ {COLOR_CYAN} \] \ h" elif [[-n $ {SESS_SRC}]]. τότε αν ["$ {SESS_SRC}" == "(: 0.0)"]; τότε "[$" parent_process "==" in.rlogind * ", τότε PS1 =" $ {PS1} \ [$ {COLOR_GREEN} \] ]]. τότε PS1 = "$ {PS1} \ [$ {COLOR_BROWN} \] \ h" elif [["$ parent_process" == "in.telnetd *"]]; τότε PS1 = "$ {PS1} \ [$ {COLOR_YELLOW} \] \ h" αλλιώς PS1 = "$ {PS1} \ [$ {COLOR_LIGHTRED} = ""]]. τότε PS1 = "$ {PS1} \ [$ {COLOR_GREEN} \] \ h" αλλιώς PS1 = "$ {PS1} \ [$ {COLOR_RED} \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" ls | grep -c Αποσύνδεση) εάν [$ {DTCHSCRN} -gt 2]? τότε PS1 = "$ {PS1} \ [$ {COLOR_RED} \] [scr: $ {DTCHSCRN}]" elif [$ {DTCHSCRN} -gt 0]; [$ {BKGJBS} - $ {{{BKGJBS} - {$ {BKGJBS} - $ { gt;]. τότε PS1 = "$ {PS1} \ [$ {COLOR_RED} \] [bg: $ {BKGJBS}]" elif [$ {BKGJBS} -gt 0]; τότε το $ {STPJBS} -gt (PSP) = $ {PS1} \ [$ {COLOR_YELLOW} \] [bg: $ {BKGJBS} 2]. τότε PS1 = "$ {PS1} \ [$ {COLOR_RED} \] [stp: $ {STPJBS}]" elif [$ {STPJBS} -gt 0]; τότε PS1 = "$ {PS1} \ [$ {COLOR_YELLOW} \] [stp: $ {STPJBS}]" fi # Bracket {αν [$ {UID} -eq 0]; τότε αν "[$ {USER}" == "$ {LOGNAME}"); τότε αν [[$ {SUDO_USER}]]; τότε PS1 = "$ {PS1} \ [$ {COLOR_RED} \]" αλλιώς PS1 = "$ {PS1} \ [$ {COLOR_LIGHTRED} ] "αλλ 'αν [" $ {USER} "==" $ {LOGNAME} "]; τότε PS1 = "$ {PS1} \ [$ {COLOR_GREEN} \]" αλλιώς PS1 = "$ {PS1} \ [$ {COLOR_BROWN} \]" PS1 = -w "$ {PWD}"]. τότε PS1 = "$ {PS1} \ [$ {COLOR_GREEN} \] $ (prompt_workingdir)" αλλιώς PS1 = "$ {PS1} \ [$ {COLOR_RED} # εάν [$ {UID} -eq 0]. τότε αν "[$ {USER}" == "$ {LOGNAME}"); τότε αν [[$ {SUDO_USER}]]; τότε PS1 = "$ {PS1} \ [$ {COLOR_RED} \]" αλλιώς PS1 = "$ {PS1} \ [$ {COLOR_LIGHTRED} ] "αλλ 'αν [" $ {USER} "==" $ {LOGNAME} "]; τότε PS1 = "$ {PS1} \ [$ {COLOR_GREEN} \]" αλλιώς PS1 = "$ {PS1} \ [$ {COLOR_BROWN} COLOR_DEFAULT} \] "} # Τερματίστε το dir εργασίας στο 1/4 της συνάρτησης πλάτους οθόνης prompt_workingdir () {local pwdmaxlen = $ (($ COLUMNS / 4)) τοπικό trunc_symbol =" ... "αν [[$ PWD == $ ΣΠΙΤΙ* ]]; τότε newPWD = "~ $ {PWD # $ HOME}" αλλιώς newPWD = $ {PWD} fi αν [$ {# newPWD} -gt $ pwdmaxlen]; τότε το τοπικό pwdoffset = $ ($ {# newPWD} - $ pwdmaxlen + 3)) newPWD = "$ {trunc_symbol} $ {newPWD: $ pwdoffset: $ pwdmaxlen} 1. Εμφανίστε απλή προσαρμοσμένη ερώτηση για τις περιόδους λειτουργίας του κελύφους ξεκινώντας # από ​​το σενάριο. # 2. Εμφανίστε τη "ήπια" ερώτηση για τις συνεδρίες κελύφους μέσα στο emacs ή # xemacs. # 3 Εμφανίστε το μήνυμα promptcmd για όλες τις άλλες περιπτώσεις. Λειτουργία load_prompt () {# Λήψη PIDs τοπική parent_process = $ (cat / proc / $ PPID / cmdline | cut -d \. -f 1) τοπική my_process = $ (cat / proc / $$ / cmdline | cut -d \. -f 1) αν [[$ parent_process == script *]]; τότε PROMPT_COMMAND = "" PS1 = "\ t - \ # - \ u @ \ H {\ w} \ $" elif [[$ parent_process == emacs * || $ parent_process == xemacs *]]. τότε PROMPT_COMMAND = "" PS1 = "\ u @ \ h {\ w} \ $" εξαγωγή DAY = $ (ημερομηνία +% A) PROMPT_COMMAND = promptcmd fi εξαγωγή PS1 PROMPT_COMMAND} load_prompt 

Μπόνους - Βρείτε τα σωστά χρώματα

Όπως ίσως έχετε παρατηρήσει, οι περισσότερες από αυτές τις προτροπές χρησιμοποιούν χρώμα και το χρώμα συχνά αναπαρίσταται σε μια κωδικοποιημένη μορφή όπως '\ 033 [1; 30m', η οποία είναι αρκετά δύσκολο να διαβαστεί ή να θυμηθεί. Ένας εύκολος τρόπος να δείτε όλα τα διαθέσιμα χρώματα και να δείτε πώς θα μοιάζουν είναι απλά να επικολλήσετε το ακόλουθο απόσπασμα στο πρόγραμμα περιήγησής σας:

 για το i στο `επόμενο 1 7; σεμ 30 48; επόμενο 90 ​​107 `; κάνουμε echo -e "\ e [$ {i} mtest \ e [0m $ i" γίνει 

Ποια θα εξάγει κάθε κωδικό χρώματος με τον αριθμό του.

συμπέρασμα

Υπάρχουν, βέβαια, άπειρες παραλλαγές που θα μπορούσαν να συσκευαστούν στην προτροπή σας. Σχεδόν κάθε είδος κειμένου μπορεί να προστεθεί και οι προγραμματιστές της BASH έχουν δεκαετίες για να προσθέσουν λειτουργικότητα. Ορισμένοι αναγνώστες σχολίασαν ακόμη και τη λειτουργία προσαρμοσμένων σεναρίων Python ή Ruby από την προτροπή. Ό, τι κι αν κάνετε, το καθιστούν λειτουργικό και αν είναι πραγματικά δροσερό, αφήστε μας ένα σύνδεσμο στα σχόλια!