在ruby中执行一些命令行bash命令

时间:2015-09-02 10:44:55

标签: ruby

有一个小的bash脚本我想将它放入ruby中的方法脚本内容如下。

def test_method
  `@echo off`
  `SETLOCAL ENABLEDELAYEDEXPANSION`
  `SET LinkName=Projects`
  `SET Esc_LinkDest=%userprofile%\Links\!LinkName!.lnk`
  `SET Esc_LinkTarget=C:\Projects`
  `SET cSctVBS=CreateShortcut.vbs`
  `SET LOG=".\%~N0_runtime.log"`
  `((`
    `echo Set oWS = WScript.CreateObject^("WScript.Shell"^)`
    `echo sLinkFile = oWS.ExpandEnvironmentStrings^("!Esc_LinkDest!"^)`
    `echo Set oLink = oWS.CreateShortcut^(sLinkFile^)` 
    `echo oLink.TargetPath = oWS.ExpandEnvironmentStrings^("!Esc_LinkTarget!"^)`
    `echo oLink.Save`
    `)1>!cSctVBS!`
  `cscript //nologo .\!cSctVBS!`
  `DEL !cSctVBS! /f /q`
  `)1>>!LOG! 2>>&1`
end

执行到((,即第8行,并给出错误No such file or directory - (( bash脚本中的那部分是我正在为文件写一些内容的东西。

只是想执行该方法并使其工作就像我在bat文件中编写相同的内容一样,它工作得非常好。

1 个答案:

答案 0 :(得分:2)

您正在尝试执行脚本的每一行,这是错误的。只需准备好你的脚本,然后一次性执行它。

cmd = <<EOC
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET LinkName=Projects
SET Esc_LinkDest=%userprofile%\Links\!LinkName!.lnk
SET Esc_LinkTarget=C:\Projects
SET cSctVBS=CreateShortcut.vbs
SET LOG=".\%~N0_runtime.log"
((
echo Set oWS = WScript.CreateObject^("WScript.Shell"^)
echo sLinkFile = oWS.ExpandEnvironmentStrings^("!Esc_LinkDest!"^)
echo Set oLink = oWS.CreateShortcut^(sLinkFile^) 
echo oLink.TargetPath = oWS.ExpandEnvironmentStrings^("!Esc_LinkTarget!"^)
echo oLink.Save
)1>!cSctVBS!
cscript //nologo .\!cSctVBS!
DEL !cSctVBS! /f /q
)1>>!LOG! 2>>&1
EOC

# OK, time to rock’n’roll!
`#{cmd}`