셸을 종료하지 않고 기록 보관

셸을 종료하지 않고 기록 보관

제가 수년 동안 사용해 온 워크플로가 예상한 대로 작동하지 않는다는 것을 방금 깨달았습니다. 오랫동안 깨닫지 못했기 때문에 노력할 가치가 없다고 생각했을 수도 있지만 이제는 어느 정도 중요해졌습니다.

내가 무슨 말을하는거야? 좋습니다. tmux여러 세션이 실행 중이고 각각 ​​다른 창 등이 있습니다. 이렇게 일하는 것이 좋습니다. 그러나 단점이 있습니다. 어떤 이유로든 서버가 다시 시작되면 모든 세션이 닫힙니다. 공평하게 말하면, 이는 피할 수 없는 일이며 자주 발생하지 않습니다. 그런데 짜증나게도 나의 zshor가 모두 bash history사라졌습니다. 이것은 문제입니다. 나는 내 역사에 너무 많이 의존하고 있는 것 같다.

나는 fc -W이 문제를 피하기 위해 때때로 (in)을 클릭합니다. zsh나는 이것이 메모리 내 기록을 추가할 것이라고 생각했으며 fc -W마지막 호출과 서버 다시 시작 사이의 부분을 잃을 것입니다. 그러나 그것은 그렇게 하는 것이 아닙니다. fc -W한 창에서 사용하고 다른 창에서 사용 하면 fc -W첫 번째 창의 기록이 두 번째 창의 기록으로 덮어쓰여집니다. 먼저 사용해야 하는데 fc -R그러면 전체 기록이 복사됩니다. 기본적으로 저는 해당 fc명령을 남용해 왔습니다.

tmux질문은: 내가 안에 있는 동안 갑자기 전원이 꺼졌을 때 내 기록을 잃지 않도록 어떻게 해야 합니까? 노트:

  • 만일을 대비해 무한 히스토리를 사용합니다.
  • 일부 기록을 잃어도 괜찮습니다. 즉, 수동으로(또는 cronjob에서) 명령을 호출해야 하고 명령이 마지막으로 실행된 이후 기록의 일부를 잃어도 괜찮습니다.
  • 터미널을 종료하고 새 터미널을 여는 것은 해결책이 아닙니다.
  • 다른 기록이 혼합되므로 내 명령을 기록에 직접 저장하고 싶지 않습니다.
  • bash두 가지 모두에 대한 솔루션을 환영합니다 . 선호됩니다.zshzsh

편집: 모두가 오해하는 부분을 강조했습니다.

답변1

zsh에서는 fc -AI대신 을 사용하여 기록을 저장하십시오 fc -W. -A그렇지 -W않으면 다른 셸 인스턴스의 기록을 덮어쓰게 됩니다. 그리고 -I마지막 저장 이후 새로운 기록 항목만 저장됩니다.

작업 흐름을 고려하면 수동이 아닌 자동으로 기록을 저장해야 할 것입니다. inc_append_history각 명령을 실행하기 직전에 기록 파일에 저장하려면 이 옵션을 켜십시오 .

Bash에서도 동일한 효과를 얻을 수 있지만 Bash 인스턴스 간에 기록을 올바르게 공유하는 것은 더 어렵습니다. 바라보다여러 터미널 창에서 bash 기록 유지

답변2

다음 명령을 사용하여 기록을 저장할 수 있습니다 . bash(저는 익숙하지 않습니다 zsh.)

history -a

이것은 다음과 같은 경우에 작동하는 것 같습니다 zsh.

fc -ln 1 -1 > ~/.zsh_history

관련 정보