BASH: while 루프에서 명령 기록을 보는 방법은 무엇입니까?

BASH: while 루프에서 명령 기록을 보는 방법은 무엇입니까?

입력을 받아들이는 간단한 while 루프가 있습니다.

#!/bin/bash
while true; do
    read -rep $'\n '"$USER"'> ' userInput
    echo "$userInput"
done

예:

./input.sh 

 username> command1
command1

 username> command2
command2

명령 기록을 가질 수 있습니까? 그러면 키보드를 눌러 이전에 실행된 명령을 볼 수 있습니까(while 루프를 벗어나지 않고)?

답변1

작은 Readline 래퍼를 사용할 수 있습니다 rlwrap. 이것은 자체적으로 구현하지 않는 유틸리티에 대한 명령 기록을 제공하는 깔끔하고 작은 도구입니다.

rlwrap스크립트 자체에서 사용할 수 있습니다 .

rlwrap -a ./script.sh

이렇게 하면 호출된 기록 파일이 저장되고 ~/.script.sh_history해당 파일을 현재 세션뿐만 아니라 향후 세션에서도 사용하여 단계별로 실행할 수 있는 기록을 제공합니다.

설명서를 참조하십시오 rlwrap.

rlwrap일반적으로 대부분의 Unices에서 패키지로 제공되지만GitHub 저장소.

답변2

history -s편집 이력 목록을 이용하여 read -e이력을 확인할 수 있습니다.

#!/bin/bash
while true; do
    read -rep $'\n '"$USER"'> ' userInput
    history -s "$userInput"
    echo "$userInput"
done

명령 기록과 관련된 다양한 옵션이 있습니다. 동작은 스크립트와 대화형 셸 간에 매우 다를 수 있습니다. 예를 들어, 명령 기록은 스크립트의 파일에서 자동으로 로드되거나 저장되지 않습니다. 이는 귀하의 경우에 필요할 수도 있고 필요하지 않을 수도 있습니다. 하지만 그렇지 않은 경우 코드를 더 추가하여 문제를 해결할 수 있습니다.

관련 정보