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: ~ () $ alias2. set
alias POM='git pull origin master'
alias cdd='cd ~/Dropbox'
alias cdg='cd ~/Github'
alias cdh='cd ~/hgrepo'
...
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!
type: để xem loại của function và định nghĩa của nó:
ReplyDeletehvn@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 -;
}