How to append code verbatim to .bashrc?
I'd suggest a here document
$ cat >> .bashrc <<'EOF'
export PATH="/home/user/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
EOF
So long as the EOF
word (which can be anything) is quoted, no shell expansion of the body takes place.
However, the usual
echo '..' >> ~/.bashrc
will evaluate the statements before appending. How do you properly append such statements to a file using the command line without evaluation?
No it won't. Anything inside of single-quotes is completely un-evaluated. You can use
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
without any worry that anything will be interpreted. The only character of any significance in a single-quoted string is a single-quote (which ends the string, and cannot be escaped.)
You can add \
in front of special characters.
For example:
echo export PATH=\"/home/user/.pyenv/bin:\$PATH\"
gives the following result:
export PATH="/home/user/.pyenv/bin:$PATH"
so the quotation marks and the $PATH
are still there.