New FAMILUG

The PyMiers

Friday, 2 August 2013

[bash] introspection

introspection: dịch thô ra Tiếng Việt là
Sự tự xem xét nội tâm; sự nội quan

trong quyển sách học python nổi tiếng nhất Dive Into Python có 1 chương tên là "The Power Of Introspection", viết về câu lệnh id, dir để soi xét xem một object có những đặc tính gì.

Trên bash, một số câu lệnh giúp bạn biết được những cài đặt mà bạn đang dùng, cũng có thể coi là 1 kiểu introspection:

1. alias
Hiện các alias mà bạn đang dùng (tức bạn đã định nghĩa nó hoặc lấy từ các file ~/.bash_alias, ...

hvn@archhvn: ~ () $ alias
alias POM='git pull origin master'
alias cdd='cd ~/Dropbox'
alias cdg='cd ~/Github'
alias cdh='cd ~/hgrepo'
...
2. set


Hiện tất cả các biến đang sử dụng (bao gồm cả các bash functions)

hvn@archhvn: ~ () $ set | head
BASH=/usr/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_COMPLETION_COMPAT_DIR=/etc/bash_completion.d
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="4" [1]="2" [2]="45" [3]="2" [4]="release" [5]="x86_64-unknown-linux-gnu")


3. env
Hiện tất cả các biến environment

hvn@archhvn: ~ () $ env | head
XDG_VTNR=1
XDG_SESSION_ID=1
SSH_AGENT_PID=707
DESKTOP_STARTUP_ID=i3/i3-sensible-terminal/705-7-archhvn_TIME2040249
TERM=rxvt-unicode
SHELL=/bin/bash
WINDOWID=31457287
USER=hvn
hvn@archhvn: ~ () $ which env
/usr/bin/env

4. set -x ; set +x
tác dụng như bật tính năng debug của bash lên. Sau khi gõ set -x, bạn sẽ thấy diễn giải của mọi thứ, kể cả cái PS1 của bạn được bôi màu thế nào :D

hvn@archhvn: ~ () $ set -x
+ set -x
++ printf '\033]0;%s@%s:%s\007' hvn archhvn '~'
++ git_branch
+++ git symbolic-ref HEAD
+++ cut -d/ -f 3
++ echo
Dùng set +x để tắt đi.

Happy bash!

1 comment:

  1. type: để xem loại của function và định nghĩa của nó:

    hvn@archhvn: ~ () $ type deps
    deps is a function
    deps ()
    {
    cd $1/..;
    parent=`pwd`;
    cd -;
    tarball=/tmp/salt_`date +%Y%m%d_%H%M%S`_$2.tar.gz;
    $1/xxx.py $parent/saltpillar $parent/data > $tarball;
    if [ ! -z $3 ]; then
    if ! `scp $tarball root@$3:/tmp`; then
    ssh-keygen -f ~/.ssh/known_hosts -R $3;
    scp $tarball root@$3:/tmp;
    fi;
    fi
    }
    hvn@archhvn: ~ () $ declare -f deps
    deps ()
    {
    cd $1/..;
    parent=`pwd`;
    cd -;
    }

    ReplyDelete