Bash의 대화형 기록 검색과 유사한 사용자 정의 텍스트 파일을 검색할 수 있기를 원합니다.
원하는 항목을 찾으면 해당 줄을 실행하십시오.
보너스 포인트: 각 레코드에는 검색 대상과 실행할 명령이라는 두 개의 필드가 포함되어 있습니다.
제가 달성하려는 것은 서버 목록에서 서버 이름을 빠르게 자동 완성할 수 있도록 하는 것입니다.
답변1
다음을 사용하여 Bash 기록 자체에 사용자 정의 파일을 로드할 수 있습니다.history
주문하다. history -r
명령 기록으로 지정한 파일이나 지정한 파일을 읽습니다.HISTFILE
그 중 하나의 이름을 지정하지 않는 경우:
history -r ~/custom
Ctrl-R그런 다음 일반 작업을 사용하여 기록 !
확장 등을 포함하여 사용자 정의 파일의 데이터가 포함된 기록에 액세스할 수 있습니다.
일시적으로만 활성화하려는 경우 현재 기록을 저장하고 사용자 정의 파일을 읽은 다음 마지막에 일반 파일을 읽을 수 있습니다.
$ history -w # Or -a if you prefer
$ history -r ~/custom
...
$ history -cr
history -cr
메모리 내 기록이 지워지고 표준 기록 파일에서 다시 읽혀집니다 $HISTFILE
. 이 프로세스를 단축하기 위해 별칭을 만들 수도 있습니다.
또는 다음을 사용하여 계산된 값을 기록에 추가할 수 있습니다.history -s
. 다음은 파일을 읽는 것과 동일합니다.
while read command
do
history -s "$command"
done < ~/custom
이 방법으로 임의의 기록 항목을 원하는 수만큼 추가하고 사용 가능한 데이터를 기반으로 계산을 수행할 수 있습니다(예: 서버 이름 및 포트 목록을 읽고 사용 history -s "ssh -p $port $servername"
). 이는 함수 내에서 잘 작동합니다. 기록 쓰기, 지우기, 복원에 대한 동일한 옵션이 여기에 적용됩니다.
마지막 옵션으로, HISTFILE
시작 시 환경에 설정 하면 bash
해당 파일이 기록으로 처리됩니다. 스크립트에서 새 셸을 시작하고 HISTFILE
사용자가 명령을 선택할 수 있도록 적절하게 설정할 수 있습니다 HISTFILE=~/custom bash
. 신중하게 구성하면 선택한 명령을 실행한 후 즉시 셸이 종료되도록 할 수 있습니다.
Bash 자체 외부에서는rlwrap
Readline의 다른 명령줄 도구를 래핑하는 도구입니다.. rlwrap -H ~/custom cmd...
주어진 기록 파일을 사용하여 명령을 실행합니다. 사용자 입력으로 서버 이름을 선택하는 등 원하는 작업을 정확하게 수행하도록 프로그램을 구축한 다음 명령을 구축할 수 있습니다.