현재 세션 기록에 푸시하지 않고 zsh에서 명령을 실행하는 방법은 무엇입니까? [복사]

현재 세션 기록에 푸시하지 않고 zsh에서 명령을 실행하는 방법은 무엇입니까? [복사]

bash와 zsh는 명령 앞에 공백을 추가하는 경우 명령을 기록에 넣지 않는 간단한 방법을 지원합니다. 이는 세션 전반에 걸쳐 훌륭하게 작동합니다(있는 경우 setopt histignorespace). 그러나 명령은 여전히 ​​현재 세션 기록에 남아 있습니다.

명령을 입력하지 않는 방법현재 세션 기록(또는 실행 후 if를 삭제하시겠습니까?)

답변1

setopt histignorespace명령을 사용하다현재 세션 기록에서 제거합니다. 를 눌러 테스트 Up하고 명령줄이 그대로 있는지 확인하면 기능입니다.

해당 명령은 다음 명령이 입력될 때까지 내부 기록에 남아 있으므로 해당 줄을 잠시 재사용하거나 편집할 수 있습니다. 다른 명령을 입력하지 않고 즉시 사라지게 하려면 공백을 입력하고 Enter 키를 누르세요.

입력한 명령이 공백으로 시작하지 않거나 histignorespace이 옵션이 켜져 있지 않은 경우현재 세션 기록에서 명령을 제거할 수 없습니다.(외부에서 기록 파일을 편집할 수 있습니다).

답변2

zsh 대신 bash를 사용하는 경우 다음 기술을 사용하여 기록에서 명령을 제거할 수 있습니다.

위쪽 화살표를 눌러 해당 줄에 도달한 다음 Ctrl-U를 눌러 삭제합니다. ENTER를 누르지 말고 위쪽 또는 아래쪽 화살표를 눌러 다른 기록 줄로 이동하세요.

삭제하려는 줄은 빈 줄로 대체됩니다. 이것이 어디에 문서화되어 있는지는 모르겠지만, 몇 년 전에 우연히 발견한 것뿐입니다... 삭제는 단지 기록 라인을 꽤 철저하게 편집한 것일 뿐인 것 같아요 :).

예를 들어 ^U를 눌러 줄을 지우는 대신 뭔가를 변경하세요.엔터를 누르지 마세요, 그러면 새 기록 항목이 생성됩니다. 대신 위쪽 또는 아래쪽 화살표를 누르세요. 이제 행이 기록에서 영구적으로 변경되었으며, 위쪽/아래쪽 화살표를 사용하여 다시 보기로 가져오면 이를 확인할 수 있습니다.

영구적이라는 것은 위쪽/아래쪽 화살표 키를 누른 후 새/편집된 명령에서 Enter 키를 눌러도 줄이 변경된 상태로 유지된다는 의미입니다. 편집된 행만 기록에 남아 원래 행을 대체하고 쉘을 종료할 때 평소와 같이 $HISTFILE에 저장됩니다.

기록에 영향을 주지 않도록 ^C를 눌러 편집을 중단하거나 ^U를 눌러 지우면 됩니다.

history -d또 다른 방법은 과거 행 번호를 알고 있는 경우 사용하는 것입니다. 예를 들어:

$ 역사 | grep 역사 |
[...관련없음, 삭제됨...]
10113 도움말 기록
10114 역사 | grep 꼬리 |

$ 역사 -d 10113

$ 역사 | grep 역사 |
[...관련없음, 삭제됨...]
10113 역사-d 10113
10114 역사 | grep 꼬리 |

help history줄은 삭제되었습니다history -d 10114

관련 정보