ot RED(27-07-2000)

reiting (43)   [ dobre ]  [ zle ]

Printer Friendly Variant za otpechatvane

  1. Promeniane na bash prompta
  2. Dobaviane na psevdonimi (alias)
  3. Promenlivata PROMPT_COMMAND
  4. TSvetove za Bash
  5. 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.



<< Linux v BBC (chast 1) | Pregled na mrezhovite vuzmozhnosti na Linuks >>