2015-09-10 5 views
0

Я вижу необычное поведение при выполнении команды из Ruby. Когда я бегуВыполнение команды из Ruby

`find ./ -type f -exec sed -i -e 's/\/\/static.squarespace.com/http:\/\/static.squarespace.com/g' {} \;` 

от терминала, он работает, но когда я пытаюсь сделать то же самое в Руби

`system(find ./ -type f -exec sed -i -e 's/\/\/static.squarespace.com/http:\/\/static.squarespace.com/g' {} \;)` 

я

find: -exec: no terminating ";" or "+"

Как могу ли я сделать это в Ruby успешно?

+0

Вы, кажется, забыли поставить некоторые '' '' на свой вопрос, поэтому, учитывая, что код, который у вас есть, не является исполняемым, мы не можем найти проблему со 100% уверенностью. -paste ваша проблема как можно точнее.Но вероятно, что вам нужно удвоить ваши обратные слэши. – Amadan

ответ

2

Удостоверьтесь, что вы дважды избегаете обратной косой черты - в противном случае \; становится только ;. Это работает:

cmd = "find ./ -type f -exec sed -i -e 's#\/\/static.squarespace.com#http:\/\/static.squarespace.com#g' {} \\;" 
system(cmd) 
+0

Теперь m получение 'sed: 1:" s /// static.squarespace. ... ": bad flag в команде substitute: 's'' –

+1

Я вижу - обновленный ответ. Использует' # 'как разделитель вместо'/' –

+0

, который работает. Спасибо. Никогда не использовал' sed' раньше. –