bash 스크립트 내에서 실행될 때 “history”가 작동을 멈춤 다음을 수행 할 수 있습니다. history |

특정 문자열을 찾기 위해 bash 기록을 grep하는 간단한 스크립트를 작성 중입니다. 커맨드 라인에서 다음을 수행 할 수 있습니다.

history | grep git

그러나 위와 동일한 명령으로 bash 스크립트를 만들면 갑자기 history아무것도 반환하지 않습니다.

#!/bin/bash
history | grep git

첫 번째 줄을 제거하면 #!/bin/bash스크립트가 다시 작동합니다. 여기서 무슨 일이 일어나고 있습니까? historybash 스크립트 안에서 어떻게 사용할 수 있습니까?



답변

다음은에 대한 bash 4.0 or higher only것이지만 트릭을 수행합니다. 🙂

#!/bin/bash -i
history | grep sometext

공장! 사용해보십시오. ( -i= nteractive, 플래그 하지 배시 3.X 사용할 이하)


답변

예를 들어 shebang 행이 실행 파일 인 실행 파일을 실행하여 bash 쉘 스크립트를 실행 #!/bin/bash하면 스크립트는 비 대화식 쉘에서 실행됩니다. 비 대화식 쉘의 기능 중 하나는 히스토리가 사용 불가능하다는 것입니다. 따라서 스크립트가 히스토리를 사용할 수있게하려면 다음과 같이해야합니다.

#!/bin/bash
HISTFILE=~/.bash_history   # Or wherever you bash history file lives
set -o history             # enable history
history | grep git

물론,이 경우 방금 수행 할 수 있습니다.

grep git ~/.bash_history

위의 두 가지 모두 히스토리 파일 ( ~/.bash_history)이 최신 상태 여야하므로 거의 확실하지 않습니다.

shebang 행을 제거한 후 스크립트를 어떻게 실행하는지 잘 모르겠습니다. 파일을 소싱 (예., 함께하는 .)입니다 없는 역사를 가지고 현재 쉘에서 실행되는 명령을 활성화하기 때문에 스크립트를 실행하는 것과 동일합니다.