일부 설치를 수행할 때 사용된 명령을 기록하기 위해 "HISTFILE" 변수를 다른 파일로 변경했습니다. 이제 기본적으로 파일을 사용하는 명령을 history
사용하는 것처럼 이 명령을 사용하여 표시하고 싶습니다 .history
.bash_history
history
명령 에 어떤 옵션을 전달해야 합니까 ? 시도할 때 history ~/.history.d/alternate_history
오류 메시지가 나타납니다.
-bash: history: /home/vfclists/.history.d/alternate_history: numeric argument required.
도움말에는 man
내가 원하지 않는 다른 기록 파일을 일부 변경하는 것처럼 보이는 몇 가지 옵션이 나열되어 있습니다.
답변1
이것history
이 명령은 파일에서는 작동하지 않으며 메모리 내 기록 목록에서만 작동합니다. 파일에서 목록을 읽고( r
) 쓰고( -w
) 추가( ) -a
한 다음 메모리에 있는 목록에 액세스하거나 조작할 수만 있습니다. 파일을 읽으면 현재 셸 세션의 기록이 대체되거나 확장됩니다.
그러나 다른 셸을 생성하고 해당 기록을 조작하여 현재 셸의 기록에 영향을 주지 않고 원하는 명령을 실행할 수 있습니다.
bash -c 'history -cr file ; history'
또는
( history -cr file ; history )
history
두 경우 모두 두 번째 명령에 원하는 기록 옵션을 추가할 수 있습니다. 이 작업을 자주 수행하는 경우 파일을 인수로 받아들이고 하위 쉘 버전을 실행하는 함수를 정의할 수 있습니다.
histfile() {
( history -cr "$1" ; history )
}
저장된 타임스탬프를 표시하려면 다음도 설정해야 합니다.HISTTIMEFORMAT
. 서브셸을 사용하고 호스트 셸에서 타임스탬프를 얻는 경우 타임스탬프는 자동으로 있어야 하지만 bash -c
빌드나 스크립트의 경우 이를 설정해야 합니다.
bash -c 'history -cr file ; HISTTIMEFORMAT="%Y%m%d%H%I%S " history'
export
상위 셸의 변수를 사용할 수도 있습니다 .
답변2
현재 쉘에 대한 현재 정보는 history
메모리에 저장되며 쉘을 종료한 후에만 HISTFILE에 기록됩니다.
종료 쉘을 사용하기 전에 이런 일이 발생할 수 있습니다 history -a
. 파일 내용을 현재 기록 등으로 읽어들이는 매개변수도 있습니다. 본질적으로 RTFM입니다 :-)
따라서 현재 기록을 작성한 history -a temp_history_file
다음 새 기록을 읽는 데 사용할 수 있습니다 history -r new_history_file
. 그러면 명령 기록이 new_history_file의 명령을 포함하게 됩니다. 왜냐하면 이것이 최신 항목이기 때문입니다.