Definindo um alias quando as aspas duplas e aspas simples falharem

0

Esta questão não é uma duplicata de Por que o alias se comporta de maneira diferente do que executar o comando bash diretamente? porque tentei essa solução e ela não funcionou. Eu substituí todas as minhas aspas simples por aspas duplas e vice-versa. O comando não funciona de jeito nenhum.

Estou tentando implementar um alias, sys , que abrirá um arquivo. Acompanho alterações no meu sistema em sys.md , adiciono uma data, puxo essa linha, colo a linha, substituo por - para o formato markdown h2, abra uma nova linha e insira um - para o formato de marcação markdown. De vi.stackexchange.com recebi alguma ajuda para implementar o comando. Funciona:

nvim +'$pu_|r!date' +'norm yypVr-o ' ~/notes/sys.md

Quando substituo as aspas simples por aspas duplas, o $ pu_ é avaliado e recebo

zsh: event not found: date

Portanto, as aspas simples são importantes. No entanto, quando eu implementar o alias

alias sys="nvim +'$pu_|r!date' +'norm yypVr-o- ' ~/notes/sys.md"

O alias falha. nvim abre, mas a data é anexada à segunda linha e não ao final. Claramente, $ pu_ está sendo avaliado como uma variável da BASH. (o verificador de sintaxe nvim mostra que ele deve ser avaliado). Invertendo as duplas e singles para renderizar

alias sys='nvim +"$pu_|r!date" +"norm yypVr-o- " ~/notes/sys.md'

Tem o mesmo comportamento. Backticks,

alias sys='nvim +"$pu_|r!date" +"norm yypVr-o- " ~/notes/sys.md'

Congela o bash em source .zshrc . Eu não sei como proceder. Qualquer ajuda seria muito apreciada.

    
por malan 23.08.2018 / 15:06

2 respostas

1

Basta colocá-lo em uma função bash (você pode adicionar a função a .bashrc ):

sys() {
    nvim +'$pu_|r!date' +'norm yypVr-o ' ~/notes/sys.md
}

Então você pode invocá-lo como faria com um alias.

    
por 23.08.2018 / 16:18
-1

Se o seu único problema é entender como ter um caractere single quote dentro de uma única string entre aspas, aqui está o método. Use:

'\''

para o caractere single quote dentro da string com aspas simples.

Isso encerra a string citada atual, insere uma aspa entre aspas e, em seguida, inicia uma nova string entre aspas.

BTW: como esse é um problema freqüente, bosh vem com um método para automatizar essa conversão. Você pode buscar schilytools e compilá-los e depois reproduzir com bosh . Se você ligar:

set -o hashcmds
#b aliasname aliasreplacement

O valor em aliasreplacement é inserido no modo raw e, se você chamar mais tarde:

alias aliasname

você vê o alias no formulário corretamente citado e se digitar

alias -R aliasname

você vê o alias no modo raw .

    
por 23.08.2018 / 15:42