2009-12-10 3 views
1

TextMate에 내장 된 Ruby 스크립트가 있으며 TextMate에서 성공적으로 실행할 수 있습니다. 또한이 스크립트를 터미널에서 바로 실행할 수 있습니다.Ruby, Mac, Geektool 질문, 파일 액세스 권한?

스크립트는 코드의 덩어리를 가지고 :

스크립트가 GeekTool에 의해 실행됩니다
# Get the XML file 
puts 'Opening the file' 
open("messages.xml", "r") do |f| 
    puts 'File is opened' 

    theXML = Hpricot::XML(f) 
    puts 'Trying to get the message_entity' 
    message_entity = GetMessage(theXML) 

    # Build the system command 
    puts 'Getting the author and the message' 
    theAuthor = message_entity.search(:author).text 
    theMessage = message_entity.search(:messagetext).text  

    # Get the correct image for this author 
    theAuthorImage = '' 

    case theAuthor 
     when 'James' : theAuthorImage = 'images/me32.png' 
     when 'Zuzu' : theAuthorImage = 'images/Zuzu32.png' 
    end 

    puts "/usr/local/bin/growlnotify '" + theAuthor + " says' -m '" + theMessage + "' -n 'Laurens Notes' --image '" + theAuthorImage + "'" 
    #system("/usr/local/bin/growlnotify '" + theAuthor + " says' -m '" + theMessage + "' -n 'Laurens Notes' --image '" + theAuthorImage + "'") 
end 
puts 'The End' 

, 그것은 puts 'File is opened' 과거 얻을 수 없다. 그것은 심지어 puts 'The End'을 치지 않습니다. 전혀 오류가 없습니다.

이 스크립트는 Mac의 /System 폴더 아래에 있지만, "everyone"이 "& 쓰기"액세스 권한을 가질 수 있도록 파일 사용 권한을 변경했습니다. EDIT 방금 ​​내 사용자 홈 폴더 아래에있는 폴더에 파일을 복사했지만 여전히 GeekTool에는 문제가 있지만 TextMate에는 문제가 있거나 터미널을 통해 직접 문제가 없습니다.

최종 편집

2 편집

내가 GeekTool 아마 파일 경로에 문제가있을 수 있습니다 생각합니다.

예를 들어 지금 당장 인터넷에서 XML 파일을 읽도록 프로그램을 변경했지만 프로그램은 growlnotify의 아이콘에 사용중인 일부 이미지가 있습니다. TextMate를 실행할 때 이러한 아이콘이 완벽하게 표시됩니다. GeekTool을 사용하여 실행할 때 ... 아니요. 사용자 정의 아이콘이 전혀 없습니다.

마치 GeekTool이 파일 경로를 올바르게 처리하지 못하는 것 같습니다. puts __FILE__.to_s 할 때 내 .rb 파일에 올바른 파일 경로를 제공합니다.

** 끝 2 번째 편집 ** 어떻게해야합니까?

+0

당신이 실행하려는 geektool에서 실제 쉘 명령은 무엇을 사용

File.dirname(__FILE__) 

으로 검색 할 수 있습니까? – wesgarrison

+0

ruby ​​/path/to/my/file.rb 정확한 명령을 터미널에 입력하면 작동합니다. –

답변

1

Geektool은 /로부터 모든 명령을 실행하므로 growlnotify를 실행하려고 할 때 상대 경로 이름이 작동하지 않습니다.

puts Dir.pwd #outputs "/" 

growlnotify에 이미지의 절대 경로를 전달해야합니다.

현재 경로

그래서 당신이

theAuthorImage = File.dirname(__FILE__) 

case theAuthor 
    when 'James' : theAuthorImage += '/images/me32.png' 
    when 'Zuzu' : theAuthorImage += '/images/Zuzu32.png' 
end 

cmd = "/usr/local/bin/growlnotify '#{theAuthor} says' -m '#{theMessage}' -n 'Laurens Notes' --image '#{theAuthorImage}'" 
puts cmd 
system cmd 
+1

xml 파일을 로컬로 열려고 할 때 동일한 문제가 있습니다. –

1

/tmp/geektool.txt에 로그하는 아래 블록과 같이 모두 배치하십시오. 그런 다음 (파일 권한과 같은) 알지 못하는 예외가 있는지 확인할 수 있습니다. 또한

begin 
    #file.open... etc 
rescue Exception => e 
    file.open('/tmp/geektool.txt', 'w'){|f| f.puts "#{e}\n\n#{e.backtrace}"} 
end 

은 루비 으르렁 거리는 보석 거기 잊지 마세요.

+0

"루비 쥬얼리 보석도 잊지 마세요." Wiggity-What ?! –

+0

오, 나는 이미 그것에 대해 조사했다. 네트워크 연결없이이 작업이 필요합니다. 고마워, 나는 로그 것을 시도 할 것이다. –

+0

나는 오류가 없지만, 아이러니하게도, 똑같은 tmp/geektool.txt 파일을 내 블록의 바로 안쪽에 쓰려고하는데, 단지 현재 시간을 쓰고 있습니다. Textmate 및 Terminal에서는 작동하지만 GeekTool에서 스크립트를 실행하는 경우에는 작동하지 않습니다. Soooo ........ 여기에서 어디로 가야할지 모르겠다. –

0

GeekTool이 console.log 또는 system.log에 출력을 내보내는 지 확인 했습니까?

또한 'File is opened'를 지나치지 않으면 보석과 Hpricot이 필요한 문제 일 수 있습니다.

+0

console.log 또는 system.log를 어디에서 확인할 것인지 잘 모르겠습니다. 나는 그것을 알아 내기 위해 노력할 것이다. "파일이 열렸습니다"라는 의미도 아니기 때문에 일반적인 "열린"코드에 문제가있는 것입니다. –

+0

로그에 아무것도 없습니다. –