Qual caractere escapar para que funcione em ~ / .bashrc

Sep 24 2020

Quero adicionar este iostatcomando ao meu .bashrce criar um alias para ele:

iostat -xk 2 $(findmnt -T ~ | awk 'END {print $2}')

Estou adicionando isso ao meu .bashrc:

alias ios='iostat -xk 2 $(findmnt -T ~ | awk 'END {print $2}')'

Infelizmente, isso não funciona.

Se eu executar o iostatcomando acima em um terminal ele funciona, mas quando executo o iosalias ele não funciona mais.

E sim, eu reinicio meu shell todas as vezes.

Respostas

10 chepner Sep 25 2020 at 05:34

Em vez disso, use uma função; a citação é mais simples:

ios () {
  iostat -xk 2 $(findmnt -T ~ | awk 'END {print $2}')
}
6 Rinzwind Sep 24 2020 at 19:16
alias ios='iostat -xk 2 $(findmnt -T ~ | awk 'END {print $2}')'

você não pode usar aspas entre aspas. Alternar entre aspas e aspas duplas é o método mais fácil. Então isso funciona:

$ alias ios="iostat -xk 2 $(findmnt -T ~ | awk 'END {print $2}')" $

Da edição:

Observe que embora funcione neste caso (porque ~não vai mudar para um dispositivo de bloco diferente nesse meio tempo), as aspas externas "suaves" fazem com que a substituição do comando seja avaliada no momento da definição, em vez de dinamicamente na invocação do alias

Se precisar de aspas simples, você pode colá-las usando '"'"':

$ alias ios='iostat -xk 2 $(findmnt -T ~ | awk '"'"'END {print $2}'"'"')' $
GyroGearloose Sep 24 2020 at 19:35

Aspas aninhadas são sempre um problema.

Você pode fazer assim:

echo 'Hello '\'~\'' world'