나는 sshfs를 사용하여 개발 상자에서 몇 가지 유용한 작업을 수행합니다. 좋아요. 그러나 나는 보통 fusermount -u
덮개를 닫기 전에(최대 절전 모드 실행) 이 작업을 수행하는 것을 잊어버립니다. 그러다가 다시 돌아왔을 때 sshfs가 정지되어 청소를 해야 했습니다.
나는 모든 sshfs 마운트 지점과 DWIM을 반복하는 /etc/pm/sleep.d에 스크립트를 갖고 싶습니다. checks 를 사용하여 fusermount -u
코드를 작성 했습니다 df -l
. 그러나 테스트 중에 이 기능이 fusermount -u
작동 하려면 모든 마운트 지점을 종료해야 한다는 사실도 확인했습니다 .
그러나 나는 열린 bash 터미널을 반복하고 그 안에서 유용한 작업을 수행하는 방법을 모릅니다. 돕다?
답변1
다음에서 사용자 정의 사용자 신호 처리기를 등록하여 이를 달성할 수 있습니다 ~/.bashrc
.
trap '[ "$PWD" = "/my/sshfs/mount" ] && cd ~' SIGUSR1
SIGUSR1
그런 다음 bash 프로세스에 신호를 보낼 때마다 이 핸들러가 호출됩니다.
killall -u "$USER" -USR1 bash
여기에는 몇 가지 주의 사항이 있습니다.
- 신호 처리기~ 해야 하다모든(대화형 및 비대화형) bash 인스턴스에 등록하세요. 그렇지 않으면 기본 작업(종료)이 수행됩니다. 나는
~/.bashrc
일반적으로 사용하는 것이 트릭을 수행할 것이라고 생각합니다 . 그러나 Bash의 일부 옵션은 이 시작 파일의 소스를 재정의합니다. - 모든 쉘 프로세스는 주어진 sshfs 디렉토리에 의존하는 작업을 수행할 수 있습니다. 이 디렉토리를 무작위로 변경하면 특정 스크립트가 해당 시점(또는 그 이후)에 수행하는 작업에 따라 임의의 정의되지 않은 동작이 발생할 수 있습니다.
- 지정된 디렉터리에 bash 프로세스에서 시작된 다른 프로세스가 여전히 있을 수 있습니다. 이러한 프로세스를 죽이는 것 외에는 할 수 있는 일이 많지 않습니다.