bash히스토리 를 하나로 관리해볼까요?

사용자들이 직접 작성하는 실전팁!

Moderator: Dry8r3aD

Post Reply
protochaos
Posts: 1714
Joined: 2011/05/19 Thu 7:43 pm

bash히스토리 를 하나로 관리해볼까요?

Post by protochaos » 2013/06/24 Mon 10:29 pm

[code:22teid0c]
#$HOME/.bashrc
HISTCONTROL=ignoredups:ignorespace

shopt -s histappend
HISTSIZE=1000
HISTFILESIZE=1000
HISTTIMEFORMAT="%T "

_bash_history_sync() {
builtin history -a
HISTFILESIZE=$(eval echo \$HISTSIZE)
builtin history -c
builtin history -r
}
export PROMPT_COMMAND="_bash_history_sync"
[/code:22teid0c]

history 명령시에 자동으로, 변경사항을 저장하고, 다시 읽어들입니다.
이러면, 세션별로 히스토리가 저장되는것이 아니라, 모두 하나의 히스토리를 갖게 되죠.

그러나 이런 방법에 단점도 있습니다.
터미널별로 바로 전 명령을 바로 접근할 수 없다는 것입니다.


이에 따라 다음과 같은 절충안을 생각해 볼 수 있습니다.
[code:22teid0c]
HISTCONTROL=ignoredups:ignorespace
shopt -s histappend

HISTSIZE=1000
HISTFILESIZE=10000
HISTTIMEFORMAT="%T "

historyg() {
ps -o pid= -o user= -C bash|awk -v u=$USER '$2~u{print $1}'|xargs kill -USR2
local HISTSIZE=10000
local HISTFILESIZE=10000
builtin history -c
builtin history -r
builtin history "$@"
}
trap 'builtin history -a' USR2

[/code:22teid0c]

매번 history접근시마다, 동기화를 하지 않고, historyg 명령이 있을 경우,
USR2시그널을 사용자의 bash 프로세스에 전달하며, 각 프로세스는 자신의 현재 히스토리를 저장합니다.
이렇게 되면 현재 세션에서는 바로 전체 히스토리가 적용되지만, 이후에는 세션자체의 히스토리만 사용됩니다.
다른세션은 변함이 없는 상태에서, historyg명령을 함으로써 전체히스토리를 적용할 수 있습니다.

즉, historyg명령은 전체히스토리를 현재세션에 적용하라는 명령이라 볼 수 있습니다.

rs3gold
Posts: 3
Joined: 2013/08/03 Sat 12:03 pm
Contact:

Re: bash히스토리 를 하나로 관리해볼까요?

Post by rs3gold » 2013/08/03 Sat 12:14 pm

A lot of people only never need to bog along his or her harddrive ever again when compared with the idea by now can be and a few

Post Reply