열려 있는 모든 쉘에서 명령 실행

열려 있는 모든 쉘에서 명령 실행

나는 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 프로세스에서 시작된 다른 프로세스가 여전히 있을 수 있습니다. 이러한 프로세스를 죽이는 것 외에는 할 수 있는 일이 많지 않습니다.

관련 정보