Вы написали:
x = "/foo/bar/dir"
x.gsub("/","\\/")
=> "\\/foo\\/bar\\/dir"
Итак, Ты сделал то, что просил раньше. x.gsub("/","\\/")
фактически оценивается как "\/foo\/bar\/dir"
, но irb печатает возвращаемое значение метода inspect
вместо to_s
.
Редактировать: Вы имели в виду
real_path.gsub("/","\/")
Стоит
real_path.gsub("\/","\/")
В любом случае вывод правильный - Вы изменили /
с \/
, поэтому у вас есть
"sh -c 'sed '\''s/SHARE_PATH/\/home\/me\/www\/idata\/shared/g'\'' .... "`
вместо
`"sh -c 'sed '\''s/SHARE_PATH//home/me/www/idata/shared/g'\'' .... "`
и результат отличается от результата irb (обратите внимание на отсутствие двойной обратной косой черты).
Для работы с путями я рекомендую использовать File.join
( документация )
Кстати: почему Вы так изменяете путь? (1)
Edit2: Почему Вы спрашиваете об изменении "/" на "/", но пишете следующую строку?
path = real_path.gsub("\/","\\/")
Чего Ты пытаешься достичь? И каков Ваш ответ на вопрос (1)
?
Edit3:
Вот и мы:
>> real_path = "/foo/bar/dir"
=> "/foo/bar/dir"
>> path = real_path.gsub("/", "\\/")
=> "\\/foo\\/bar\\/dir"
>> puts "sed 's/SHARE_PATH/#{path}/g' #{path}/config/sphinx.yml > #{path}/config/sphinx.tmp.yml"
sed 's/SHARE_PATH/\/foo\/bar\/dir/g' \/foo\/bar\/dir/config/sphinx.yml > \/foo\/bar\/dir/config/sphinx.tmp.yml
=> nil
>>
но я не понимаю, зачем вам нужен обратный слеш в пути?