I'm working on a script to make setting up a Statamic site more efficient. The problem I'm running into is that the variable I'm using to replace a string in a file has unescaped forward slashes and is user input. How can I make sure that _site_url: http://statamic.com
will become _site_url: http://example.com
?
The code below will work as long as there are no forward slashes present.
echo "What's your site URL? Don't forget the protocol (ex. http://)!"
read -e SITE_URL
echo "%s/_site_url: http:\/\/statamic.com/_site_url: $SITE_URL/g
w
q
" | ex _config/settings.yaml
A non-quoted backslash, \, is used as an escape character in Bash.
Bash Character Escaping. Except within single quotes, characters with special meanings in Bash have to be escaped to preserve their literal values. In practice, this is mainly done with the escape character \ <backslash>.
Escaping is a method of quoting single characters. The escape (\) preceding a character tells the shell to interpret that character literally. With certain commands and utilities, such as echo and sed, escaping a character may have the opposite effect - it can toggle on a special meaning for that character.
Answer. The forward slash (/) and backslash (\) is referred to as a pathname separator. Either slashes (/) or backslashes (\) can be used as pathname separators in pathname patterns and version selectors, unless the config spec will be shared between UNIX (or Linux) and Windows hosts.
Since you specifically mentioned bash instead of Bourne shell or generic Unix shell, I'd recommend using Bash's built in search/replace feature:
echo "What's your site URL? Don't forget the protocol (ex. http://)!"
read -e SITE_URL
echo Escaped URL: ${SITE_URL//\//\\\/}
The problem is the delimiter in your ex
command. We can put anything we'd like instead, I use @
here :
Try doing this :
sed -i "s@_site_url: http://statamic.com/_site_url: $SITE_URL@g" _config/settings.yaml
Or with your ex
command :
echo "What's your site URL? Don't forget the protocol (ex. http://)!"
read -e SITE_URL
echo "%s@_site_url: http://statamic.com@_site_url: $SITE_URL@g
w
q
" | ex _config/settings.yaml
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With