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.