2017-04-19 1 views
0

내 Ubuntu 16.04 상자에 Android 장치를 연결할 때 대화 형 터미널에 텍스트를 인쇄하려고합니다.내 bash 트랩 처리기를 즉시 실행할 수있는 방법이 있습니까?

내가 가진 해결책은 시스템의 모든 bash 프로세스에 kill -SIGUSR1을 전송하는 스크립트를 실행하는 사용자 정의 udev 규칙과 관련됩니다.

udev에 규칙 :

ACTION=="add", SUBSYSTEM=="usb", ENV{adb_user}=="yes", RUN+="/bin/bash /script/location/onconnect.sh %k" 

onconnect.sh :

if [[ ${*} != *":"* ]]; then 
    for p in $(ps -U username | grep bash | cut -d" " -f1); do 
     kill -SIGUSR1 $p 
    done 
fi  

위의 작품. 그러나 내 터미널에 Enter 키를 누르면 내 환경에만 적용되는 트랩 처리기가 호출되는 것 같습니다. 명령을 기다리고 즉시 인쇄하는 bash 스레드를 인터럽트 할 수있는 방법이 있습니까? 내 명령 행에서

... 

function deviceadded() { 
    echo "you've plugged in a device!" 
} 

trap "(deviceadded&)" SIGUSR1 

... 

, 그것은 좀 다음과 같습니다

신호가 발생할 때 :

[~]$ 
[~]$ you've plugged in a device! 

[~]$ _ 

그러나, 텍스트가 아니라 내 트랩을 설치하는 데 사용하는 .rc 파일은 다음과 같습니다 내가 진입 한 후 표시됩니다. 나는 전에 bash를 사용하지 않았다. trap, 그래서 그것의 가능한 나는 단지 그것이 어떻게 작동하는지 오해하고있다. 즉시 인쇄 할 수있는 방법이 있습니까?

더 좋은 방법이 있나요?

편집 : udev 규칙 및 udev 대상 스크립트가 추가되었습니다.

+0

내 시스템에서 메시지가 즉시 표시되지만 리턴 키를 누른 후에 프롬프트 만 다시 표시됩니다. 그것은 당신도 경험하는 것입니까? – Fred

+0

@Fred 아니, 나를 위해 나는 무엇이라도보기 전에 들어가야 만한다. 그런 다음 메시지가 인쇄 된 다음 Enter 키를 다시 눌러 내 프롬프트를 다시 표시해야합니다. 당신이보고있는 행동은 제가 생각하기에 더 가깝습니다. udev 규칙과 대상 스크립트를 포함하여 게시물을 업데이트했습니다. 아마도 거기에 지연이 있습니까? – awm129

답변

0

트랩에 포함 된 명령이 백그라운드에서 실행되기 때문에 이런 현상이 발생한다고 생각합니다.

trap deviceadded SIGUSR1 

를 어떻게되는지 :

는 것처럼 트랩 명령을 설정하십시오.

+0

트랩 처리기를 포어 그라운드에 두는 것 - 코드를 사용하여 - 원래 게시물에서 볼 수있는 것과 동일한 지연된 실행을 제공하는 것 같습니다. – awm129

관련 문제