3
예를 들어 레이크에서 다음 명령을 실행하려고합니다. 리터럴 문자열의 처리가 어색하지만 Windows에서 명령을 실행하기 위해 rakefile을 작성하는 가장 좋은 방법은 무엇입니까?
robocopy C:\Media \\other\Media /mir
내가 작업을 얻을 수 있었다 rakefile
는def sh(str)
str.tr!('|', '\\')
IO.popen(str) do |pipe|
pipe.each do |line|
puts line
end
end
end
task :default do
sh 'robocopy C:|Media ||other|Media /mir'
end
했다. 내가
<<HEREDOC
copy C:\Media \\other\Media /mir
HEREDOC
리터럴 문자열을 입력 할 히어 닥을 사용하는 경우 내가 작은 따옴표를 사용하는 경우
내가 오류를
rakefile.rb:15: Invalid escape character syntax
copy C:\Media \\other\Media /mir
^
rakefile.rb:15: Invalid escape character syntax
copy C:\Media \\other\Media /mir
^
를 얻을 백 슬래시 중 하나가 손실됩니다.
irb(main):001:0> 'copy C:\Media \\other\Media /mir'
=> "copy C:\\Media \\other\\Media /mir"
예.하지만 질문에 나열된 코드와 마찬가지로 모든 역 슬래시 문자를 이스케이프 처리하는 것은 어렵습니다. – Frank
문자열에서 백 슬래시를 단순히 이스케이프 처리하는 것이 가장 쉬운 일이 아니라고 생각합니다.하지만 여기서 가능한 문서 구문을 사용하여 답변을 업데이트했습니다. –
좋습니다. HEREDOC은 갈 길입니다. << HEREDOC 구문을 처음 보았습니다. 왜 << HEREDOC은 똑같은 일을하지 않았습니까? – Frank