- Promeniane na bash prompta
- Dobaviane na psevdonimi (alias)
- Promenlivata PROMPT_COMMAND
- TSvetove za Bash
- Primeri
Ako ne znaete kakvo e tova Bash, a iskate
da
nauchite poveche e dobre da prochete tazi statiia "Pisane
na skriptove za BASH shel".
Promeniane na bash prompta
Predi da zapochnem da promeniame bash prompta e
dobre
da zapazim starata mu stoinost, za vseki sluchai.
Stoinostta na prompta se pazi ot promenlivata na
obkruzhenieto PS1. Za
da zapazim tazi stoinost e dobre da ia prisvoim na
druga promenliva. Tova stava po sledniiat nachin:
[slaff@atlantis slaff]$ SAVE=$PS1
Sega starata stoinost na PS1 promenlivata se
pazi ot promenlivata SAVE. PS1 promenlivata opredelia
kak da izglezhda nashiiat prompt. Neka da napravim
purvata promiana i da prisvoim na PS1 promenlivata
stoinost "command>":
[slaff@atlantis slaff]$ PS1="command>"
V rezultat na tazi opretsiia shte imame sledniia
prompt:
command>
Sega neka se opitame da vuzstanovim stariia
prompt
command> PS1=$SAVE
[slaff@atlantis slaff]$
Bash pozvoliava izpolzvaneto i na spetsialni
simvoli, koito da stoiat v nashiiat prompt. Eto i
niakoi ot tezi spetsialni simvoli:
\a predizvikva piukane na spikera
\d pokazva data vuv format "Den ot sedmitsata"
"Mesets" Den ot mesetsa" (primerno "Tue
May 26")
\h imeto na hosta do purvata tochka (pr. host
subdomain.domain.org -> imeto na hosta do purvata
tochka =
subdomain)
\H tsialoto ime na hosta
\n nov red
\r nov red
\s imeto na shelut, koito izpolzvame
\t vremeto za 24 chasa v sledniia format HH:MM:SS
(HH-chas,
MM-minuti, SS-sekundi)
\T vreme za 12 chasa v sledniia format HH:MM:SS
\u potrebitelskoto ime (username)
\v versiia na bash shela(primerno 2.00)
\w pulniiat put do tekushtata direktoriia
\W samo imeto na tekushtata direktoriia
\! koia podred e tazi komanda
\nnn osmichno chislo
\\ obratno naklonena cherta (t.e. \)
\[ nachalo na posledovatelnost ot "kontrolni
simvoli"
\] krai na posledovatelnost ot "kontrolni
simvoli"
Promptut, koito izpolzvahme do momenta e
sustaven ot slednite spetsialni simvoli:
\u (potrebitelsko ime) t.e slaff
\h imeto na hosta do purvata tochka t.e atlantis
\W imeto na tekushtata direktoriia t.e slaff
[slaff@atlantis slaff]$ PS1="\u@\h \W> "
slaff@atlantis slaff> ls
bin mail
slaff@atlantis slaff>
Tozi prompt e nai-chesto izpolzvan v povecheto Linux
distibutsii.
Neka sega da promenim prompta taka, che da pokazva
i chasut:
slaff@atlantis slaff> PS1="[\t][\u@\h:\w]\$ "
[21:52:01][slaff@atlantis:~]$ ls
bin mail
Ako ne iskame vseki put da promeniame promta, a
toi da se promenia oshte s vlizaneto ni, triabva da
promenim failut .bash_profile, koito se namira
vuv nashata glavna direktoriia. Ako takuv fail ne
sushtestvuva triabva da go suzdadem. Ako imate root
prava i
iskate da promenite na vsichki potrebiteli
prompta redaktiraite failut /etc/profile
ili
/etc/bashrc . Imaite predvid, che tozi fail
mozhe da se namira na drugo miasto za razlichnite Linux
distributsii. Samoto redaktrane se sustoi v
dobavianeto na tozi red
PS1="[\t][\u@\h:\w]\$ "
Dobaviane na psevdonimi (alias)
Alias predstavliava psevdonim(alternativno ime) na
dadena komanda
ili posledovatelnosti ot komandi i se izpolzva
za ulesnenie. Ako naprimer iskate vseki put
vmesto da pishete komandata "cd /usr/local/share/"
da napishete samo GO triabva da napravite sledniia
psevdonim
alias GO="cd /usr/local/share/"
Za da ne go pishete vseki put tozi psevdnim e
nai-dobre
da go dobavite vuv failut .bash_profile
Promenlivata PROMPT_COMMAND
Prmenlivata PROMPT_COMMAND se pokazva ili izpulniava
predi da se pokazhe samiiat prompt. Razgledaite
sledniiat primer:
[21:55:01][slaff@atlantis:~] PS1="[\u@\h:\w]\$ "
[slaff@atlantis:~] PROMPT_COMMAND="echo 2155"
2155
[slaff@atlantis:~] d
bin mail
2156
[slaff@atlantis:~]
Tova koeto se sluchva e da se pokazva chisloto 2155
vinagi predi pokazvaneto na samiiat red.
Problemut tuk e, che 2155 ne se pokazava na sushtiia red
na koito se pokazva i prompta. Za tselta shte
izpolzvame optsiiata -n na komandata echo.
[slaff@atlantis:~] PROMPT_COMMAND="echo -n 2155"
2156[slaff@atlantis:~]$
2156[slaff@atlantis:~]$ d
bin mail
Veche neshtata izglezhdat po-dobre.
Sega shte vi pokazha kak mozhete da nakarate promta
da pokazva razmera koito zaema tekushtata
direktoriia.
Zapishete sledniia Bash skript v /usr/local/bin
direktoriiata pod imeto lsbytesum. Direktoriia mozhe i
da e druga, stiga da e posochena v promenlivata
PATH.
___________________________________________________
#!/bin/bash
# lsbytesum - sum the number of bytes in a directory
listing
TotalBytes=0
for Bytes in $(ls -l | grep "^-" | cut -c30-41)
do
let TotalBytes=$TotalBytes+$Bytes
done
TotalMeg=$(echo -e "scale=3 \n$TotalBytes/1048576
\nquit" | bc)
echo -n "$TotalMeg"
___________________________________________________
Napravete tozi fail izpulnim.
Promeniame prompta:
[2158][slaff@atlantis:~]$ PS1="[\u@\h:\w
(\$(lsbytesum) Mb)]\$ "
[slaff@atlantis:~ (0 Mb)]$ cd /bin
[slaff@atlantis:/bin (4.498 Mb)]$
Tova e. Veche imame prompt, koito pokazava kolko
e goleminata na tekushtata direktoriia.
Nishto ne prechi da se suzdadat i drugi promptove.
Opitaite sami da suzdadete nov.
TSvetove za Bash
Mozhe bi ste zabeliazali tsvetnite suobshteniia pri
startiraneto na RedHat.
Pisaneto na tsvetni suobshteniia e elementarno.
Neka da si napravim nashe tsvetno suobshtenie.
Opitaite sledniia primer:
echo -e "\033[41;33;1m Welcome to Linux\033[m"
Tazi komanda shte izpechata "Welcome to Linux" s
zhulti bukvi na cherven fon. Zabelezhete, che teksta e
obgraden ot "\033[bg;fg;1m \033[m". CHisloto 41
ukazva,
che fonut na bukvite triabva da e cherven, a 33
ukazva, che tsveta na bukvite triabva da e zhult.
Kodovete na tsvetovete sa slednite:
Za tsviat na fona: 30=cherno, 31=cherveno, 32=zeleno,
33=zhulto,
34=sinüo, 35=purpurno, 36=tyurkoazeno, 37=bialo
Za tsviat na bukvite: 0=prozrachno, 40=cherno,
41=cherveno,
42=zeleno, 43=zhulto, 44=sinüo 45=purpurno,
46=tyurkoazeno,
47=bialo
Ako iskame da promenim nashiia nadpis i da go
napravim s beli bukvi na sin fon triabva da
napishem slednoto
echo -e "\033[44;37;1m Welcome to Linux\033[m"
Eto i edna primerna programa za Slackware
distributsiiata na Linux
___________________________________________________
#/bin/bash
version="`cat /etc/slackware-version`"
echo -e "\033[41;33;1m Welcome to Slackware
$version\033[m"
___________________________________________________
Osven tsvetni suobshteniia mozhe da imate i tsveten
prompt. Otsvetiavaneto na prompta stava po sushtiia
nachin kakto i normalen tekst s tazi razlika,
che triabva da zagradim teksta s \[\033[ i
m\]. Za da poluchim svetlo sin prompt
triabva da napravim slednoto
PS1="\[\033[1;34m\][\$(date
+%H%M)][\u@\h:\w]$\[\033[0m\] "
Eto i kodovete za tsviat na bukvite:
CHerno 0;30 Tumno sivo 1;30
Sinüo 0;34 Svetlo sinüo 1;34
Zeleno 0;32 Svetlo zeleno 1;32
TSiklameno 0;36 Svetlo tsiklameno 1;36
CHerveno 0;31 Svetlo cherveno 1;31
Purpurno0;35 Svetlo purpurno 1;35
Kafiavo 0;33 ZHulto 1;33
Svetlo sivo 0;37 Bialo 1;37
Ako iskate vashiiat prompt da bude sus svetlo sinüo
na cherven fon triabva da zipolzvate slednata
kombinatsiia:
\[\033[44;1;31m\]
ili
\[\033[44m\]\[\033[1;31m\]
Dopulnitelni kodove:
4: Podchertan, 5: Migasht, 8: Nevedidim
Eto i edin primeren skript
___________________________________________________
function elite
{
local GRAY="\[\033[1;30m\]"
local LIGHT_GRAY="\[\033[0;37m\]"
local CYAN="\[\033[0;36m\]"
local LIGHT_CYAN="\[\033[1;36m\]"
case $TERM in
xterm*)
local TITLEBAR='\[\033]0;\u@\h:\w\007\]'
;;
*)
local TITLEBAR=""
;;
esac
local GRAD1=$(tty|cut -d/ -f3)
PS1="$TITLEBAR\
$GRAY-$CYAN-$LIGHT_CYAN(\
$CYAN\u$GRAY@$CYAN\h\
$LIGHT_CYAN)$CYAN-$LIGHT_CYAN(\
$CYAN\#$GRAY/$CYAN$GRAD1\
$LIGHT_CYAN)$CYAN-$LIGHT_CYAN(\
$CYAN\$(date +%H%M)$GRAY/$CYAN\$(date +%d-%b-%y)\
$LIGHT_CYAN)$CYAN-$GRAY-\
$LIGHT_GRAY\n\
$GRAY-$CYAN-$LIGHT_CYAN(\
$CYAN\$$GRAY:$CYAN\w\
$LIGHT_CYAN)$CYAN-$GRAY-$LIGHT_GRAY "
PS2="$LIGHT_CYAN-$CYAN-$GRAY-$LIGHT_GRAY "
}
___________________________________________________
Ne e mnogo lesno da se pomniat kodovete na
otdelnite tsvetove zatova mozhe da si pomognete
sus sledniia skript:
___________________________________________________
#!/bin/bash
#
# This file echoes a bunch of colour codes to the
terminal to demonstrate
# what's available. Each line is one colour on black
and gray
# backgrounds, with the code in the middle. Verified
to work on white,
# black, and green BGs (2 Dec 98).
#
echo " On Light Gray: On Black:"
echo -e "\033[47m\033[1;37m White \033[0m\
1;37m \
\033[40m\033[1;37m White \033[0m"
echo -e "\033[47m\033[37m Light Gray \033[0m\
37m \
\033[40m\033[37m Light Gray \033[0m"
echo -e "\033[47m\033[1;30m Gray \033[0m\
1;30m \
\033[40m\033[1;30m Gray \033[0m"
echo -e "\033[47m\033[30m Black \033[0m\
30m \
\033[40m\033[30m Black \033[0m"
echo -e "\033[47m\033[31m Red \033[0m\
31m \
\033[40m\033[31m Red \033[0m"
echo -e "\033[47m\033[1;31m Light Red \033[0m\
1;31m \
\033[40m\033[1;31m Light Red \033[0m"
echo -e "\033[47m\033[32m Green \033[0m\
32m \
\033[40m\033[32m Green \033[0m"
echo -e "\033[47m\033[1;32m Light Green \033[0m\
1;32m \
\033[40m\033[1;32m Light Green \033[0m"
echo -e "\033[47m\033[33m Brown \033[0m\
33m \
\033[40m\033[33m Brown \033[0m"
echo -e "\033[47m\033[1;33m Yellow \033[0m\
1;33m \
\033[40m\033[1;33m Yellow \033[0m"
echo -e "\033[47m\033[34m Blue \033[0m\
34m \
\033[40m\033[34m Blue \033[0m"
echo -e "\033[47m\033[1;34m Light Blue \033[0m\
1;34m \
\033[40m\033[1;34m Light Blue \033[0m"
echo -e "\033[47m\033[35m Purple \033[0m\
35m \
\033[40m\033[35m Purple \033[0m"
echo -e "\033[47m\033[1;35m Pink \033[0m\
1;35m \
\033[40m\033[1;35m Pink \033[0m"
echo -e "\033[47m\033[36m Cyan \033[0m\
36m \
\033[40m\033[36m Cyan \033[0m"
echo -e "\033[47m\033[1;36m Light Cyan \033[0m\
1;36m \
\033[40m\033[1;36m Light Cyan \033[0m"
___________________________________________________
Primeri
Po nadolu e posochen dosta interesen prompt koito
si smenia tsvetovete v zavisimost ot natovarvaneto
na sistemata.
___________________________________________________
#!/bin/bash
# "hostloadcolour" - 17 October 98, by Giles
#
# The idea here is to change the colour of the host
name in the prompt,
# depending on a threshold load value.
# THRESHOLD_LOAD is the value of the one minute load
(multiplied
# by one hundred) at which you want
# the prompt to change from COLOUR_LOW to
COLOUR_HIGH
THRESHOLD_LOAD=200
COLOUR_LOW='1;34'
# light blue
COLOUR_HIGH='1;31'
# light red
function prompt_command {
ONE=$(uptime | sed -e "s/.*load average: \(.*\...\),
\(.*\...\), \(.*\...\)/\1/"
-e "s/ //g")
# Apparently, "scale" in bc doesn't apply to
multiplication, but does
# apply to division.
ONEHUNDRED=$(echo -e "scale=0 \n $ONE/0.01 \nquit \n"
| bc)
if [ $ONEHUNDRED -gt $THRESHOLD_LOAD ]
then
HOST_COLOUR=$COLOUR_HIGH
# Light Red
else
HOST_COLOUR=$COLOUR_LOW
# Light Blue
fi
}
function hostloadcolour {
PROMPT_COMMAND=prompt_command
PS1="[$(date +%H%M)][\u@\[\033[\$(echo -n
\$HOST_COLOUR)m\]\h\[\033[0m\]:\w]$ "
}
___________________________________________________
Tazi statiia e kratuk prevod na Bash-Prompt-HOWTO
Posochenite primeri i mnogo drugi mozhe da otkriete na
adres http://bash.current.nu.