특정 문자열을 찾기 위해 bash 기록을 grep하는 간단한 스크립트를 작성 중입니다. 커맨드 라인에서 다음을 수행 할 수 있습니다.
history | grep git
그러나 위와 동일한 명령으로 bash 스크립트를 만들면 갑자기 history
아무것도 반환하지 않습니다.
#!/bin/bash
history | grep git
첫 번째 줄을 제거하면 #!/bin/bash
스크립트가 다시 작동합니다. 여기서 무슨 일이 일어나고 있습니까? history
bash 스크립트 안에서 어떻게 사용할 수 있습니까?
답변
다음은에 대한 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 행을 제거한 후 스크립트를 어떻게 실행하는지 잘 모르겠습니다. 파일을 소싱 (예., 함께하는 .
)입니다 없는 역사를 가지고 현재 쉘에서 실행되는 명령을 활성화하기 때문에 스크립트를 실행하는 것과 동일합니다.