2015-01-08 3 views
0

프로그램에서 터미널로 출력 할 때 사운드를 재생할 수있는 방법이 있습니까? 인쇄 된 모든 줄 바꿈에터미널 출력에서 ​​사운드 재생

$ for i in {0..10}; do echo $i; done

내가 소리를 재생할 수, 또는 명령을 실행

이의 내가 실행한다고 가정 해 봅시다?

특히 WEBrick for Rails 개발을 실행 중이며 서버를 보지 않고도 서버에 대한 요청이있을 때마다 알고 싶습니다.

당신은 sox package에서 play 같은 명령 행 기반 사운드 플레이어를 확인할 수 있습니다

+0

벨 문자가 작동합니까? 'echo -e "\ a"' – August

+0

시도해보십시오. http://unix.stackexchange.com/questions/8607/how-can-i-play-a-sound-when-script-execution-is-ready 기본적으로'; '구분 기호를 사용하여 BASH에게 소리를 내도록 지시합니다. 첫 번째 명령이 완료되면 파일. – franklin

+0

빈 줄이 생깁니다. –

답변

2

이것은 꽤 복잡한 솔루션 일지 모르지만, 내가 원하는 것을 수행합니다. log.txt에 변화를

#ensure that the call is made only once, preventing an infinite loop 

if [ $SHLVL == 1 ] 
then 
    script -afq ~/custom/log.txt #log everything that happens in the shell 
fi 

#call my script only once by checking for another instance of it 

if [[ ! $(pidof -x script.sh) ]] 
then 
    ~/custom/script.sh& 
fi 

내 script.sh 파일 검사 및 경고음을 (당신이 그것을 다운로드해야합니다) 그렇게되면 재생 : 내 .bashrc에 파일에서

, 나는 다음과 같은 추가 : 그 때마다 뭔가 입력을 포함하여 쉘의 변화 때문에

#!/bin/bash 

$(stat -c %y ~/custom/log.txt > ~/custom/update.txt) 

while : 
do 
    now=$(stat -c %y ~/custom/log.txt) 
    update=$(cat ~/custom/update.txt) 
    if [ "$now" != "$update" ] 
    then 
     $(stat -c %y ~/custom/log.txt > ~/custom/update.txt) 
     $(play -q ~/custom/beep.ogg vol 0.1) #props to franklin 
    fi 
done 

이 그것을 만들 것입니다, script.sh는 play를 실행합니다. 이제 터미널을 볼 필요없이 WEBrick 서버에 요청이있을 때마다 알게되었습니다.

2

(나는 리눅스 민트 17 배쉬를 사용하고 있습니다).

그러면 루프가 성공적으로 반복 될 때마다 play 프로그램을 실행하도록 for 루프를 작성할 수 있습니다.

for i in {0..10}; do 
    # do your stuff here, presumably something like: 
    `ruby /path/to/script.rb` 
    echo $i 
    `play /path/to/notification.ogg` 
done 
+0

그게 내가 쓰는 스크립트에 대한 문제를 해결할 수는 있지만,'rails s '와 같이 내가 제어하지 못하는 것은 어떨까요? –

+0

여기에 게시하거나 이야기하고있는 종류의 레일 스크립트를 github에 게시 할 수 있습니까? 내가 그 질문을 이해하는지 모르겠다. – franklin

+0

'play' 명령 팁을 보내 주셔서 감사합니다. 일반적인 해결책이 필요했기 때문에 스크립트 자체를 변경할 필요가 없었습니다. 원한다면 산출물을 '스파이'로 만드는 방법. 나는 곧 나의 해결책을 게시 할 것이다. 다시 한 번 팁을 주셔서 감사 드리며, 저는 그것을 솔루션에 사용하고 있습니다. –

3

당신은 AASCII "벨 문자"를 시도 할 수 있습니다 (07), echo 명령에의 풍경의 문자 (\a)에 의해.

입력 문자열에서 이스케이프 문자를 구문 분석하려면 "echo -e"을 사용해야합니다. 예 : 여기 echo -e "line 1\nline 2"

상세 정보 : http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/bash-prompt-escape-sequences.html

은 BASH에서 당신이 할 수 있습니다

for i in {0..10}; do echo -e "$i\a"; sleep 0.2; done 

당신은 루비 에서 같은 풍경의 문자를 사용할 수 있습니다 (난 IRB에 대한 테스트를했다). 귀하의 레일 애플 리케이션에 직접보십시오 :

puts "bell\a" 
+0

어떤 이유에서'echo -e \ n'은 제게 아무런 의미가 없습니다. 이 문제를 해결하기 위해'paplay'를 사용하고 있습니다. 도와 주셔서 감사합니다. –

+0

@ fábio-queluci'echo -e \ n'은 명령을 실행하기 전에 쉘에 의해'echo -e n'으로 변환됩니다. '\'따옴표는 특수 문자를 취소하는 데 사용됩니다. '\ n'을 명령에 보내려면'echo -e '\ n "'또는'echo -e"\ n "'와 같이 따옴표로 묶은 문자열 안에 넣어야합니다. – Aurium

+0

머리를 주셔서 감사합니다. 나는 벨을 넣으려고했지만 아무 것도 얻지 못했다. 단지 "벨"뿐이었다. 나는 그것을 보았다. 그리고 나는 문제가 나의 랩탑이라고 생각한다. –