Como criar um alias para um comando que contém apóstrofos e aspas?

Como criar um alias para um comando que contém apóstrofos e aspas?

Como resultado da minha pergunta anterior, decidi

alias groe= ?vim -c 'normal "+p1Gdddd"' -c ':%s/\n/' -c 'normal"gVGgJy"' -c'q!'?

Não consigo descobrir como substituir '?s' no meu exemplo para que funcione. Já tentei pontos de interrogação e apóstrofos. Qualquer idéia seria apreciada. THX

Responder1

Torne-a uma função shell, para que você possa perder as aspas externas.

groe() {
  vim -c 'normal "+p1Gdddd"' -c ':%s/\n/' -c 'normal"gVGgJy"' -c'q!' "$@"
  }

Isso deve chamar vimcom os argumentos -c, normal "+p1Gdddd", -c, :%s/\n/, -c, normal"gVGgJy", -cq!. O "$@"at the se expande para os parâmetros que você deu à função, então groe foo.txtdeve funcionar.

Responder2

Aspas simples "dentro" você pode ter uma aspa simples fechando a aspa simples externa, depois adicionar uma aspa simples com escape e reabrir as aspas simples externas, como

echo 'It'\''s ugly.'

Em outras palavras, tudo 'se tornará '\''mais aspas simples externas.

Seu alias ficaria assim:

alias groe='vim -c '\''normal "+p1Gdddd"'\'' -c '\'':%s/\n/'\'' -c '\''normal"gVGgJy"'\'' -c'\''q!'\'''

Ou você pode usar escapes no estilo C, $'...'onde você precisa escapar de aspas simples apenas uma vez, mas também escapar de caracteres em \n:

echo $'It\'s a newline: \\n'
alias groe=$'vim -c \'normal "+p1Gdddd"\' -c \':%s/\\n/\' -c \'normal"gVGgJy"\' -c\'q!\''

Responder3

No MacOS, descobri que colocar a seguinte linha no meu .bash_profileme deu um alias que só configura meu alias útil após o uso posterior do logrcomando:

alias logr="alias r='java -jar LogUtil.jar -gui'"

Usei aspas duplas ""em todo o logralias criado para todos os novos shells, mas o ralias só fica disponível quando eu emito o logrcomando.

informação relacionada