2016-11-04 137 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

對不起,過去的結果:( –