簡體   English   中英

編寫rakefile以在Windows中運行命令的最佳方法是什么?

[英]What is the best way to write a rakefile to run commands in windows?

作為一個例子,我想在rake下運行以下命令。

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輸入字符串文字

<<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"

雙反斜杠被解釋為轉義的單反斜杠。 你應該轉義字符串中的每個反斜杠。

irb(main):001:0> puts 'robocopy C:\\Media \\\\other\\Media /mir'
robocopy C:\Media \\other\Media /mir

或者,如果您確實不想轉義反斜杠,則可以使用帶有單引號標識符的here doc。

irb(main):001:0> <<'HEREDOC'
irb(main):002:0' copy C:\Media \\other\Media /mir
irb(main):003:0' HEREDOC
=> "copy C:\\Media \\\\other\\Media /mir\n"
irb(main):004:0> puts _
copy C:\Media \\other\Media /mir

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM