Tenho uma linha que desejo chamar usando um alias.
while printf '%s ' "$(df -P / | awk 'NR==2 { print $(NF-1) }')"; do sleep 30; done
Tentei escapar '
, \'
mas não funcionou.
Qual é a sintaxe correta para usar acima de uma linha no alias?
Responder1
alias my_du=$'while printf \'%s \' "$(df -P / | awk \'NR==2 { print $(NF-1) }\')"; do sleep 3; done'
Você pode verificar o resultado com
alias my_du
If $()
é citado por "
em vez de '
ou \
então é substituído e o resultado, em vez da chamada de programa pretendida, torna-se parte da definição do alias.
Responder2
Embora isso possa ser transformado em um alias, as funções geralmente são preferidas. De man bash
:
Para quase todos os propósitos, os aliases são substituídos pelas funções shell.
Seu alias em formato de função:
my_du() {
while printf '%s ' "$(df -P / | awk 'NR==2 { print $(NF-1) }')"
do
sleep 30
done
}
Isso é mais legível e, como tal, mais sustentável.
Responder3
Você não pode escapar de aspas simples enquanto ainda estiver entre aspas simples, porque \
é interpretado literalmente em um contexto de aspas simples. Feche as aspas simples antes de escapar ou, melhor, use aspas duplas.
alias my_du="while printf '%s ' \"\$(df -P / | awk 'NR==2 { print \$(NF-1) }')\"; do sleep 30; done"
Responder4
Se você deseja comandos que recebam argumentos ou interajam de alguma forma com seu ambiente, use funções. Pelo menos no bash, os aliases são expandidos quando definidos, elespoderagir como se pegassem argumentos ou usassem variáveis. Às vezes. A lei de Murphy garante que isso não funcionará quando for realmente necessário.