긴 인수와 함께 사용하는 폴더에 스크립트가 있습니다. 전체 히스토리를 다시 돌아 가지 않고 특정 디렉토리에서 명령 히스토리를 실행할 수있는 가능성이 있습니까?
history | less
혹시? 실제로 귀하의 질문에 대답하지는 않지만 시작하는 곳입니다.
긴 인수와 함께 사용하는 폴더에 스크립트가 있습니다. 전체 히스토리를 다시 돌아 가지 않고 특정 디렉토리에서 명령 히스토리를 실행할 수있는 가능성이 있습니까?
history | less
혹시? 실제로 귀하의 질문에 대답하지는 않지만 시작하는 곳입니다.
답변:
bash의 PROMPT_COMMAND에 연결하면 새 프롬프트가 표시 될 때마다이 함수가 실행되므로 사용자 정의 히스토리를 원하는 디렉토리에 있는지 확인해야합니다. 이 함수에는 네 가지 주요 분기가 있습니다.
$PWD
)가 변경되지 않은 경우 아무 것도 수행하지 않습니다 (반환).PWD 가 변경된 경우 "사용자 정의 디렉토리"코드를 한 곳으로 인수하는 것이 유일한 목적인 로컬 기능을 설정합니다. 내 테스트 디렉토리를 사용자의 디렉토리 (로 구분 |
) 로 바꾸고 싶을 것 입니다.
디렉토리를 변경 했으므로 "이전 디렉토리"변수를 업데이트 한 다음 메모리 내 히스토리를 HISTFILE에 저장 한 후 메모리 내 히스토리를 지우십시오.
사용자 정의 디렉토리 로 변경 한 경우 HISTFILE을 .bash_history
현재 디렉토리 의 파일로 설정하십시오.
그렇지 않으면, 우리는 변경했습니다 밖으로 그래서 주식 하나에 HISTFILE를 재설정, 사용자 정의 디렉토리.
마지막으로, 히스토리 파일을 변경 했으므로 이전 히스토리를 다시 읽으십시오.
작업을 수행하기 위해 스크립트는 PROMPT_COMMAND 값을 설정하고 두 개의 내부 사용 변수 (스톡 HISTFILE 및 "이전 디렉토리")를 저장합니다.
prompt_command() {
# if PWD has not changed, just return
[[ $PWD == $_cust_hist_opwd ]] && return
function iscustom {
# returns 'true' if the passed argument is a custom-history directory
case "$1" in
( */tmp/faber/somedir | */tmp/faber/someotherdir ) return 0;;
( * ) return 1;;
esac
}
# PWD changed, but it's not to or from a custom-history directory,
# so update opwd and return
if ! iscustom "$PWD" && ! iscustom "$_cust_hist_opwd"
then
_cust_hist_opwd=$PWD
return
fi
# we've changed directories to and/or from a custom-history directory
# save the new PWD
_cust_hist_opwd=$PWD
# save and then clear the old history
history -a
history -c
# if we've changed into or out of a custom directory, set or reset HISTFILE appropriately
if iscustom "$PWD"
then
HISTFILE=$PWD/.bash_history
else
HISTFILE=$_cust_hist_stock_histfile
fi
# pull back in the previous history
history -r
}
PROMPT_COMMAND='prompt_command'
_cust_hist_stock_histfile=$HISTFILE
_cust_hist_opwd=$PWD
Jeff의 대답 은 단일 디렉토리에 대한 히스토리를 원할 경우 훌륭하지만 zsh 설치에 문제가없는 경우 per-history-directory 를 사용 하여 모든 디렉토리의 디렉토리에 특정한 히스토리를 얻을 수 있습니다.
다음을 통해 zsh를 설치할 수 있습니다.
brew install zsh
또는 oh-my-zsh 를 설치하려면 histdb 플러그인을 추가하고 histdb 가 추가 하는 sqlite db를 쿼리하기위한 사용자 지정 쿼리를 작성할 수 있습니다 . 필자는 Dev Diaries 게시물 에 자동 완성 기능을 추가 했습니다. 보너스 명령 섹션을 확인하십시오 .
쿼리는 다음과 같습니다
show_local_history() {
limit="${1:-10}"
local query="
select history.start_time, commands.argv
from history left join commands on history.command_id = commands.rowid
left join places on history.place_id = places.rowid
where places.dir LIKE '$(sql_escape $PWD)%'
order by history.start_time desc
limit $limit
"
results=$(_histdb_query "$query")
echo "$results"
}
이것은 선택적 제한도 허용합니다.
show_local_history 50
예를 들어.