Existem três maneiras de resolver isso.
Um: é só usar uma função. os aliases são para macros de texto simples, algo que seu segundo exemplo não é.
sl() {
screen -list|grep -v There|grep -v Sockets|awk 'BEGIN { format = " %-35s %-10s %s\n"
printf format, "Name", "Active", "Status"
printf format, "----", "------", "------" }
{ printf format, $1, $2, $5 }'
}
Dois: use o widget quote-line
para escapar corretamente do comando inteiro
# type the entire command out like you would interactively.
% screen -list|grep -v There|grep -v Sockets|awk 'BEGIN { format = " %-35s %-10s %s\n"
printf format, "Name", "Active", "Status"
printf format, "----", "------", "------" }
{ printf format, $1, $2, $5 }'
# use quote-line which transform the line into:
% 'screen -list|grep -v There|grep -v Sockets|awk '\''BEGIN { format = " %-35s %-10s %s\n"
printf format, "Name", "Active", "Status"
printf format, "----", "------", "------" }
{ printf format, $1, $2, $5 }'\'''
# prepend alias sl= to the newly escaped line:
% alias sl='screen -list|grep -v There|grep -v Sockets|awk '\''BEGIN { format = " %-35s %-10s %s\n"
printf format, "Name", "Active", "Status"
printf format, "----", "------", "------" }
{ printf format, $1, $2, $5 }'\'''
E três: use apenas uma função. os aliases são para macros de texto simples.
sl() {
screen -list|grep -v There|grep -v Sockets|awk 'BEGIN { format = " %-35s %-10s %s\n"
printf format, "Name", "Active", "Status"
printf format, "----", "------", "------" }
{ printf format, $1, $2, $5 }'
}
O exemplo de awk também não depende de novas linhas, mas você precisa de ;
para separar várias instruções na mesma linha.
screen -list|grep -v There|grep -v Sockets|awk 'BEGIN { format = " %-35s %-10s %s
"; printf format, "Name", "Active", "Status"; printf format, "----", "------", "------" } { printf format, $1, $2, $5 }'
Vai funcionar.