Como escapar de aspas simples corretamente criando um alias [duplicado]

5

Recebi este verso para saber quanto de memória meus processos consomem.

$ ps -u $USER -o pid,rss,command | \
    awk '{print $0}{sum+=$2} END {print "Total", sum/1024, "MB"}'

Agora, gostaríamos de criar um alias para esse comando, mas tenha um problema ao escapar de ' 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

Eu tentei escapar das aspas simples, mas ainda assim não funciona.

$ alias mm='ps -u $USER -o pid,rss,command | \
    awk \'{print $0}{sum+=$2} END {print "Total", sum/1024, "MB"}\''
> 

Você pode me ajudar a entender como criar esse alias?

    
por Paolo 06.10.2014 / 12:42

3 respostas

8

Para tornar isso um alias, o que é possível, você precisa usar aspas duplas em torno do valor inteiro do alias. Você também precisará escapar de algumas coisas dentro do alias, e você precisa escapar de qualquer um dos argumentos de campo para awk , uma vez que estes serão interpretados como argumentos pelo Bash, bem como quando você estiver configurando o alias.

Isso funcionou para mim:

$ alias mm="ps -u $USER -o pid,rss,command | \
    awk '{print \
alias mm="ps -u ...."
}{sum+=\} END {print \"Total\", sum/1024, \"MB\"}'"

Acima, fiz o seguinte:

  1. Aspas duplas em torno do valor do alias

    awk '{print \
    awk '{print \
    $ alias mm="ps -u $USER -o pid,rss,command | \
        awk '{print \
    alias mm="ps -u ...."
    
    }{sum+=\} END {print \"Total\", sum/1024, \"MB\"}'"
    }{sum+=\} END
    }{sum+=\} END {print \"Total\", sum/1024, \"MB\"}
  2. Aspas duplas do awk escapado

    awk '{print \
    awk '{print \%pre%}{sum+=\} END
    
    }{sum+=\} END {print \"Total\", sum/1024, \"MB\"}
  3. Escapou campos do awk

    %pre%

Eu usaria isso?

Provavelmente não, eu mudaria isso para uma função Bash, já que será mais fácil manter e entender o que está acontecendo, mas aqui está o alias se você ainda quiser.

    
por 06.10.2014 / 14:13
9

Can you help me understand how to create this alias?

Posso te aconselhar a criar uma função se você usar o bash e colocá-lo no .bashrc?

mm() {
  ps -u "$USER" -o pid,rss,command |
    awk '{print $0}{sum+=$2}
         END {print "Total", sum/1024, "MB"}'
}

Se for bash , as variáveis precisam ser citadas. Em uma função, não há necessidade de colocar tudo em uma linha.

    
por 06.10.2014 / 12:52
3

Aqui está o comando escaped:

alias mm='ps -u $USER -o pid,rss,command | \
    awk '\''{print $0}{sum+=$2} END {print "Total", sum/1024, "MB"}'\'

Exemplo de escape de citações no shell:

$ echo 'abc'\''abc'
abc'abc
$ echo "abc"\""abc"
abc"abc

Basta terminar o processo já aberto ( ' ), colocar um com escape ( \' ) e abrir outro ( ' ).

Alternativamente:

$ echo 'abc'"'"'abc'
abc'abc
$ echo "abc"'"'"abc"
abc"abc

É feito ao terminar de abrir um ( ' ), colocando a cotação em outra cotação ( "'" ), depois abrindo outro ( ' ).

Relacionados: Como escapar de aspas simples dentro de strings entre aspas simples? em stackoverflow SE

    
por 28.02.2015 / 22:01