On m'a donné ce one-liner pour savoir combien de memory mes process consumnt.
$ ps -u $USER -o pid,rss,command | \ awk '{print $0}{sum+=$2} END {print "Total", sum/1024, "MB"}'
Maintenant, je voudrais créer un alias pour cette command, mais j'ai un problème qui échappe '
caractères:
$ 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
J'ai essayé d'échapper aux guillemets simples, mais cela ne fonctionne toujours pas.
$ alias mm='ps -u $USER -o pid,rss,command | \ awk \'{print $0}{sum+=$2} END {print "Total", sum/1024, "MB"}\'' >
Pouvez-vous m'aider à comprendre comment créer cet alias?
Pour faire un alias, ce qui est possible, vous devez utiliser des guillemets doubles autour de la valeur entière de l'alias. Vous devrez également échapper à certaines choses de l'alias, et vous devez échapper à n'importe quel argument de champ pour awk
car elles seront interprétées comme arguments par Bash lorsque vous définissez l'alias.
Cela a fonctionné pour moi:
$ alias mm="ps -u $USER -o pid,rss,command | \ awk '{print \$0}{sum+=\$2} END {print \"Total\", sum/1024, \"MB\"}'"
Dans ce qui précède, j'ai fait ce qui suit:
Double guillemets autour de la valeur de l'alias
alias mm="ps -u ...."
Citations doubles de Escaped awk
awk '{print \$0}{sum+=\$2} END {print \"Total\", sum/1024, \"MB\"}
Champs de awk échappés
awk '{print \$0}{sum+=\$2} END
Probablement pas, je passerais plutôt à une fonction Bash, car il sera plus facile de maintenir et de comprendre ce qui se passe, mais voici l'alias si vous le voulez encore.
Pouvez-vous m'aider à comprendre comment créer cet alias?
Puis-je vous conseiller de créer une fonction si vous utilisez bash et le mettre dans .bashrc?
mm() { ps -u "$USER" -o pid,rss,command | awk '{print $0}{sum+=$2} END {print "Total", sum/1024, "MB"}' }
Si c'est bash
, les variables doivent être citées. Dans une fonction, pas besoin de tout mettre sur une seule ligne.
Voici la command échappée:
alias mm='ps -u $USER -o pid,rss,command | \ awk '\''{print $0}{sum+=$2} END {print "Total", sum/1024, "MB"}'\'
Exemple d'échappement de guillemets en shell:
$ echo 'abc'\''abc' abc'abc $ echo "abc"\""abc" abc"abc
C'est simplement fait en terminant un ( '
) déjà ouvert, en plaçant un ( \'
) échappé, puis en ouvrant un autre ( '
).
Alternativement:
$ echo 'abc'"'"'abc' abc'abc $ echo "abc"'"'"abc" abc"abc
Cela se fait en terminant un ( '
) déjà ouvert, en plaçant un devis dans un autre devis ( "'"
), puis en en ouvrant un autre ( '
).
Relatif: Comment échapper des guillemets simples entre guillemets simples? à stackoverflow SE