bash 스크립트 내에서 실행될 때 "history"가 작동을 멈춤


9

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

history | grep git

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

#!/bin/bash
history | grep git

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

답변:


8

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

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

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


최근에 그가 할 수 있기 때문에 저를 억압 한 친구에게도 감사드립니다. (아마도 bash좌절감 때문에 v3 사용자, 하하). 적어도 Martin에게는 내 솔루션이 큰 도움이 되었기 때문에 (적어도) 편안합니다.
syntaxerror

연중 무휴 24 시간 지원 엔지니어의 근무 시간 외 근무 시간을 기록하는 도구를 작성할 때도 같은 질문이있었습니다. 감사합니다!
Henry van Megen

14

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


하고 무엇에 대해 history -a확실 마지막 명령은 먼저 파일에 추가됩니다 set 명령 직후로 만들려면?

4
@ illuminÉ : 도움이되지 않습니다. 쉘이 스크립트를 실행하기 시작한 것은 완전히 다른 과정입니다. frsh empty history로 시작합니다.
rici
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.