2016-11-04 140 views
0

我写其中包含了一些bash脚本rake任务,写 “” 从bash脚本

namespace :signup do 
    task :install do 
    sh "sudo sed -i '/Rails.application.routes.draw do/a \ 
      mount Signup::Engine, at: '/'' config/routes.rb" 
    end 
end 

但它输出: mount Signup::Engine, at: /

但我想输出,如:mount Signup::Engine, at: '/'

请帮帮我。

+0

你确实想执行:sh *** - c ***“command”? –

+0

@LeoIzen,是的,我想执行此操作。 –

+0

查看起始引号和结束符在您的字符串中的位置。你在''/ Rails.'开始一个报价,然后在'Engine'结尾一个:''。然后你就有一个坐在那里的'/',两个单引号'''',它们什么都不做,然后是剩下的部分。 –

回答

0

您的sed命令中使用双引号可以使用单引号内:

sudo sed -i "/Rails.application.routes.draw do/a\\ 
mount Signup::Engine, at: '/' 
" file 
单引号

或者使用\x27

sudo sed -i '/Rails.application.routes.draw do/a\ 
mount Signup::Engine, at: \x27/\x27 
' file 

Working Script Demo

+0

'sh“sudo sed -i'/Rails.application.routes.draw do/a \ mount Signup :: Engine,在'/''config/routes.rb'' –

+0

这是原始代码。 –

+0

这是不可能的,因为我已经使用双引号。 –

1

在bash,没有办法将'放在由单引号组成的字符串中。如果你想这样做,你必须结束单引号字符串,放置一个',然后重新启动它。这可以通过关闭字符串',插入\',然后重新打开来完成。或者您可以使用"'"而不是\'。下面是一些例子:

'No! Don'\''t do that!' 
'No! Don'"'"'t do that!' 

'mount Signup::Engine, at: '\''/'\' 
'mount Signup::Engine, at: '"'"'/'"'" 

另外,也可以使用双引号(即")的字符串,但请记住,转义字符和变量名双引号内扩展。这会给你:

"mount Signup::Engine, at '/'" 
+0

对不起,过去的结果:( –