
Me dieron esta frase para saber cuánta memoria consumen mis procesos.
$ ps -u $USER -o pid,rss,command | \
awk '{print $0}{sum+=$2} END {print "Total", sum/1024, "MB"}'
Ahora me gustaría crear un alias para ese comando, pero tengo problemas para escapar '
de los caracteres:
$ alias mm=ps -u $USER -o pid,rss,command | \
awk '{print $0}{sum+=$2} END {print "Total", sum/1024, "MB"}'
bash: alias: -u: not found
bash: alias: myuser: not found
bash: alias: -o: not found
bash: alias: pid,rss,command: not found
Total 0 MB
Intenté escapar de las comillas simples, pero aún así no funciona.
$ alias mm='ps -u $USER -o pid,rss,command | \
awk \'{print $0}{sum+=$2} END {print "Total", sum/1024, "MB"}\''
>
¿Puedes ayudarme a entender cómo crear este alias?
Respuesta1
Para convertirlo en un alias, lo cual es posible, debe utilizar comillas dobles alrededor del valor completo del alias. Como resultado, también necesitarás escapar de algunas cosas dentro del alias, y deberás escapar de cualquiera de los argumentos de campo, awk
ya que Bash también los interpretará como argumentos cuando estés configurando el alias.
Esto funcionó para mí:
$ alias mm="ps -u $USER -o pid,rss,command | \
awk '{print \$0}{sum+=\$2} END {print \"Total\", sum/1024, \"MB\"}'"
En lo anterior he hecho lo siguiente:
Comillas dobles alrededor del valor del alias
alias mm="ps -u ...."
Se escaparon las comillas dobles de awk
awk '{print \$0}{sum+=\$2} END {print \"Total\", sum/1024, \"MB\"}
Escapó de los campos de awk
awk '{print \$0}{sum+=\$2} END
¿Usaría esto?
Probablemente no, cambiaría esto a una función Bash, ya que será más fácil de mantener y comprender lo que está pasando, pero aquí está el alias si aún lo desea.
Respuesta2
¿Puedes ayudarme a entender cómo crear este alias?
¿Puedo aconsejarle que cree una función si usa bash y la coloca en .bashrc?
mm() {
ps -u "$USER" -o pid,rss,command |
awk '{print $0}{sum+=$2}
END {print "Total", sum/1024, "MB"}'
}
Si es así bash
, es necesario citar las variables. En una función, no es necesario poner todo en una sola línea.
Respuesta3
Aquí está el comando escapado:
alias mm='ps -u $USER -o pid,rss,command | \
awk '\''{print $0}{sum+=$2} END {print "Total", sum/1024, "MB"}'\'
Ejemplo de comillas de escape en Shell:
$ echo 'abc'\''abc'
abc'abc
$ echo "abc"\""abc"
abc"abc
Simplemente se hace terminando uno ya abierto ( '
), colocando uno escapado ( \'
) y luego abriendo otro ( '
).
Alternativamente:
$ echo 'abc'"'"'abc'
abc'abc
$ echo "abc"'"'"abc"
abc"abc
Se hace terminando uno ya abierto ( '
), colocando comillas entre comillas ( "'"
) y luego abriendo otro ( '
).
Relacionado:¿Cómo escapar de comillas simples dentro de cadenas entre comillas simples?en stackoverflow SE