Skocz do zawartości

[Bashrc I Bash_Profile] Aliasy, Prompty I Inne


SeeM

Rekomendowane odpowiedzi

Ostatnio pracuję trochę więcej w gnome-terminalu i w związku z tym wymyślam i kopiuję sobie aliasy. Na razie z fajnych pomysłów wymyśliłem tyle:

alias 'dir'='ls --sort=extension --color -h -al'
alias '..'='cd ..'
alias 'clr'='clear'
alias 'top'='htop --user=mojlogin --sort=PERCENT_CPU --delay=25'
alias 'x'='exit'

alias 'yumi'='yum install '
alias 'yuml'='yum list '
alias 'yumu'='yum update'

 

Prompt roota jest wypisany na czerwono (przydatne, bo czasami się zapomni o ctrl+d):

PS1="$(tput setaf 1)[\\u@\\h \\w]# $(tput sgr0)"

a prompt usera na zielono:

PS1="$(tput setaf 2)[\\u@\\h \\w]$ $(tput sgr0)"

co pomaga przy przewijaniu i odnajdywaniu miejsc ostatnio wpisywanych poleceń, jeśli output jest większy niż jeden ekran tekstu.

 

Macie jakieś swoje patenty na wygodniejszą pracę? Głównie chodzi mi o zamienniki typu top -> htop. Przydałby mi się jakiś lepszy program do pokazywania modułów kernela niż zwykły lsmod i coś lepszego niż chkconfig, najlepiej działające podobnie jak stare inity pozwalające bardzo szybko zrestartować demona. Niby można do każdego osobno zrobić alias, ale może jest coś eleganciejszego.

Odnośnik do komentarza
Udostępnij na innych stronach

chkconfig czy restarty usług załatwia systemctl. Opcje praktycznie takie jak dla starych service czy /etc/init.d/[nazwa serwisu]: start, stop, restart, status, enable, disable, hide, unhide. Czy warto robić aliasy? Wg mnie nie warto, chyba że jakiś alias np. do sprawdzenia co działa a co nie:

systemctl --full | grep \.service | grep " active"

systemctl --full | grep \.service | grep inactive

Podobnie coś z grepem dla polecenia lsmod.
Odnośnik do komentarza
Udostępnij na innych stronach

Jak używam kill -9, to mnie akurat przydaje się

alias kl='kill -9'

 

I jak edytuję nano, lubię widzieć numer linii

alias nano='nano -c'

 

Oprócz yumi i yumu jak w pierwszym poście

 

alias yumc='yum clean all'
alias yume='yum remove'
 

I takie inne udziwnienia jak:

alias tfd='tail -f /var/log/dhcpd.log'

Odnośnik do komentarza
Udostępnij na innych stronach

Zainstalować bash-completion (auto uzupełniania argumentów poleceń). Łatwo można rozszerzyć dla własnych skryptów

 

export HISTSIZE=99999    # rozmiar historii: duuuuuuży
export HISTTIMEFORMAT="| %Y.%m.%d | %T | " # historia z datą
export HISTIGNORE="&:ls:[bf]g:exit" # ignorowane w historii
history(){
    # Użycie:
    #     history # domyślnie pokazuj ostatnie 500 linii
    #     history 10 # pokazuj ostatnie 10 linii
    #     history all # pokazuj całą historię

    LINES=${1:-500}

    if [ "$1" == "all" ] ; then
        command history
    else
        command history | tail -${LINES}
    fi
}
 

 

 

alias +='sudo yum install'
alias ?='yum search'
alias yu='sudo yum update --skip-broken'
-(){
    # usuwa paczkę na podstawie polecenia
    sudo yum remove -C --noplugins $(rpm -qf $(type -P $@))
}
--(){
    # usuwa paczkę na podstawie polecenia ze śmieciami
    sudo yum remove -C --noplugins --enableplugin="remove-with-leaves" --remove-leaves $(rpm -qf $(type -P $@))
}


...
alias grep='grep --color=auto'
alias mkdir='mkdir -pv'
alias mutt-local='mutt -f /var/spool/mail/lucas'
alias reload='. ~/.bashrc'
alias ssh='/usr/bin/ssh -Y -C'
alias todo='cat >> $HOME/todo.txt' # notes, aby wyjść Ctrl+D
alias xo='xdg-open'

shopt -s autocd # wejdź do katalogu bez cd

#edytory
export EDITOR=vim
export VISUAL='geany -i'

# Must enable globstar, otherwise ** doesn't work.
shopt -s globstar
# nie pomijaj ukrytych
shopt -s dotglob

 

# obsługa błędów
err_handle(){
    echo -ne "\033[37;43;1m ;( >> $?\e[0m"
    tput cuf $(( $(tput cols) -42)) ;
    echo -e "\e[5;37;1m\e[5;41m[ ERROR! ]\e[0m"
}
trap 'err_handle' ERR

 

experymenty ze znakiem zgłoszenia w konsoli

 

hg_branch() {
    # wpisanie nazwy brancha hg/git jeśli bierzący katalog to repo
    which hg 2>/dev/null 1>&2 && ref=$(hg branch 2> /dev/null) && echo " hg:${ref#refs/heads/}"
    which git 2>/dev/null 1>&2 && {
        #parent=$(git reflog show --all | grep from | cut -d' ' -f6 )
        branch=$(git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/')
        #~ echo -n "($parent / $branch)"
        echo -n "$branch"
    }
}
# ------------------------------------------------------------------------------
set_ps1(){
    # http://www.thegeekstuff.com/2008/09/bash-shell-ps1-10-examples-to-make-your-linux-prompt-like-angelina-jolie/
    #    \e[  -- indicates the beginning of color prompt
    #    x;ym -- indicates color code. Use the color code values mentioned below.
    #    \e[m -- indicates the end of color prompt

    #    \u -- username
    #    \h -- hostname
    #    \w -- the current working directory, with $HOME abbreviated with a tilde
    #    \W -- the basename of the current working directory, with $HOME abbreviated with a tilde

    case $(whoami) in
        root)
            # kolorowy znak zgłoszenia [czerwony@pomarańczowy]
            PS1='\[\033[31m\]\u@\H \[\033[33m\]\w\[\033[0m\]'
            ;;
        oracle)
            # kolorowy znak zgłoszenia [niebieski@zielony]$
            PS1=
            PS1+='\[\033[38;05;9m\]\u'        # user
            PS1+='\[\033[38;05;4m\]@'        # @
            PS1+='\[\033[38;05;9m\]\H'        # $(hostname)
            PS1+=' \[\033[32m\]\w'            # /folder/
            PS1+='\[\033[0m\]'                 # reset
            ;;
        *)
            # kolorowy znak zgłoszenia [niebieski@zielony]$
            PS1='\[\033[34m\]\u@\H \[\033[32m\]\w\[\033[0m\]'
            ;;
    esac
    #~ PS1+='[$(who | awk "{print \$1;}" | grep -v "^root$" | sort | uniq | wc -l)] '
    # hg branch
    PS1+='\[\033[31m\]$(hg_branch)\[\033[0m\]'
    # domknięcie
    #~ PS1+=']\#\$ '
    #~ PS1+=']\w\$ '
    PS1+=' \$ '

    # ------------------------------------------------------------------------------
    # Unicode: http://panmental.de/symbols/info.htm
    # echo "♊" | hexdump -C
    # 00000000  e2 99 8a 0a                                       |....|
    # 00000004
    # [email protected] ~ $  $ PS1=$'\xe2\x99\x8a >'
    # ♊ >
    # ♊ >
    # ♊ >PS1=$'\xe2\x99\x8a \n>'
    # ♊
    # >
    # ♊
    # >
}
set_ps1 

 

najczęściej wykorzystywana funkcja w skryptach dla innych:

 

yes_no(){
    local thisX=''
    while : ; do
        read -p "$@ (y/n): " thisX
        case "$thisX" in
            [tT] | [tT][aA][kK] | [yY] | [yY][eE][sS] ) return 0 ;;
            [nN] | [nN][iI][eE] | [nN][oO] ) return 1 ;;
            * ) echo -ne "$@ (y/n): " ;;
        esac
    done
}

if yes_no "Czy lubisz bratki?"
then
   echo coś robimy
else
   echo czegoś nie zrobimy
fi

 

Szybkie przestawianie wersji programów na przykładzie maven.

$ ls -l /usr/local/share/maven/
total 8
drwxrwxrwx 6 lucas lucas 4096 Oct 18 21:29 apache-maven-2.2.1
drwxrwxrwx 6 lucas lucas 4096 Sep 16 09:42 apache-maven-3.0.5
lrwxrwxrwx 1 lucas lucas   27 Mar 14 20:40 default -> /usr/local/share/maven/mvn2
lrwxrwxrwx 1 lucas lucas   20 Oct 18 21:29 mvn2 -> ./apache-maven-2.2.1
lrwxrwxrwx 1 lucas lucas   18 Oct 18 21:26 mvn3 -> ./apache-maven-3.0.5

 

env.jetty (){
    _JAVA_OPTIONS=' ';
    _JAVA_OPTIONS+=' -Dawt.useSystemAAFontSettings=on ';
    _JAVA_OPTIONS+=' -Duser.language=pl -Duser.country=PL -Dfile.encoding=UTF-8 ';
    _JAVA_OPTIONS+=' -Xms2048m -Xmx2048m';
    _JAVA_OPTIONS+=' -XX:PermSize=256m -XX:MaxPermSize=512m';
    export _JAVA_OPTIONS
}

env.mvn(){
    rm -f /usr/local/share/maven/default
    ln -s /usr/local/share/maven/mvn${1:-2} /usr/local/share/maven/default
    export M2_HOME=$(readlink -f /usr/local/share/maven/default)
    export MAVEN_HOME=$M2_HOME
    export M2=$M2_HOME/bin
    export PATH=$M2_HOME/bin:$PATH
    export MAVEN_OPTS+=' -Dcom.sun.management.jmxremote'
    alias mvn='env.jetty ; mvnDebug'
}

# jak potrzebuje użyć wersji 2 wpisuje
env.mvn 2
# a jak wersji 3
env.mvn 3 

Poza tym mnóstwo skryptów.

Kiedyś szukałem jakiegoś notatnika dla programistów, gdzie można by było zapisywać fragmenty kodu, ale to jakoś nigdy nie działało. Dla każdego ciekawego fragment kodu poprostu robie skrypt z zastosowaniem. Niezawsze praktycznym, ale czasami ciekawe rzeczy wychodzą. Podobnie jest z aliasami. Nie pamiętam długich poleceń, niepamiętam nawet jak je składać. Każdą nową konstrukcję wpisuje do bashrc

  • Upvote 1
Odnośnik do komentarza
Udostępnij na innych stronach

  • 1 year later...

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...