긴 매개변수를 사용하는 폴더에 스크립트가 있습니다. 전체 기록을 반환하는 대신 해당 특정 디렉터리에서 실행된 명령 기록을 얻을 수 있나요?
답변1
bash의 PROMPT_COMMAND를 후킹하면 새로운 프롬프트가 수신될 때마다 이 함수가 실행되므로 지금이 기록을 사용자 정의하려는 디렉터리에 있는지 확인하는 좋은 시간입니다. 이 함수에는 네 가지 주요 분기가 있습니다.
- 현재 디렉터리(
$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
답변2
제프의답변단일 디렉토리의 기록을 원하지만 설치에 동의하는 경우에는 좋습니다.다루기 힘든당신은 그것을 사용할 수 있습니다각 히스토리 디렉토리이 디렉토리와 관련된 모든 디렉토리의 기록을 가져옵니다.
다음을 통해 zsh를 설치할 수 있습니다.
brew install zsh
아니면 설치를 원하시면아 맙소사, 추가할 수 있습니다과거 데이터베이스histdb에 의해 추가된 sqlite 데이터베이스를 쿼리하기 위해 플러그인을 사용하고 사용자 정의 쿼리를 작성합니다. 나는 그것에 대해 글을 쓰고 게시했습니다.개발일지우편 엽서. 조사하다보너스 명령부분.
쿼리는 다음과 같습니다
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
예를 들어.
답변3
긴 인수가 포함된 명령을 여러 번 사용해야 하는 경우 일반적으로 my에 별칭을 만들거나 원하는 경우 ~/.bash_aliases
your에 넣습니다. ~/.bashrc
이는 기록에서 이전 명령을 찾는 대신 쉽고 시간을 절약해 줍니다.