¿Cómo añado varias líneas que involucran variables al final de un script bash?

Me gustaría agregar:

function ps_mem { python /home/vagrant/ps_mem/ps_mem.py -p [email protected] } 

Hasta el final de ~/.bashrc desde la command-line. He intentado usar:

 printf "function ps_mem {\n python /home/vagrant/ps_mem/ps_mem.py -p [email protected] \n}" >> ~/.bashrc 

Y aunque casi funcionó, el campo de input [email protected] fue ignorado, haciendo esto:

 function ps_mem { python /home/vagrant/ps_mem/ps_mem.py -p } 

En cambio, se agrega al final de ~/.bashrc .

Se han dado otras respuestas que funcionarán, pero con el ánimo de ayudarlo a hacerlo exactamente de la forma en que lo intentó (ya que es una forma totalmente buena de hacerlo):

Aquí está el original:

 printf "function ps_mem {\n python /home/vagrant/ps_mem/ps_mem.py -p [email protected] \n}" >> ~/.bashrc 

Aquí hay una versión que funciona:

 printf 'function ps_mem {\n python /home/vagrant/ps_mem/ps_mem.py -p [email protected] \n}' >> ~/.bashrc 

Recomiendo agregar comillas dobles alnetworkingedor de [email protected] también:

 printf 'function ps_mem {\n python /home/vagrant/ps_mem/ps_mem.py -p "[email protected]" \n}' >> ~/.bashrc 

La expansión de variables está habilitada entre comillas dobles; deshabilitado en comillas simples.

Use un documento aquí para tales trabajos:

 cat <<'EOF' >>~/.bashrc function ps_mem { python /home/vagrant/ps_mem/ps_mem.py -p "[email protected]" } EOF 

Los caracteres especiales dentro de un documento aquí no serán expandidos por el shell cuando se cita <<'EOF' . Del lenguaje de commands de shell POSIX:

Si se cita cualquier carácter en la palabra, […] las líneas aquí documentadas no se expandirán.

El printf en la pregunta original funciona si reemplaza las comillas dobles " con comillas simples".

Me gusta usar printf esta manera. No hay reglas de citas especiales como en los here documents . Y sin pensar en \n . Lo que ves, es lo que tienes:

 printf '%s' ' function ps_mem { python /home/vagrant/ps_mem/ps_mem.py -p "[email protected]" } ' >> ~/.bashrc 

Para get el resultado deseado, puede usar la secuencia de escape como tal

  python /home/vagrant/ps_mem/ps_mem.py -p \[email protected]