
Eu queria escrever uma função para recuperar um campo da lista de trabalhos em segundo plano no bash. Por exemplo, para obter um argumento específico.
Digamos que eu envie o vim para segundo plano, então "jobs" exibe esta lista:
[1]+ Stopped vim ~/.bashrc
Minha função fica assim:
function jf {
echo `jobs | awk 'NR==$1{print $$2}'`;
}
Eu então chamo assim:
jf 1 4
Eu gostaria que ele retornasse a 4ª coluna da 1ª linha, que seria "~/.bashrc", mas isso não acontece. O que estou fazendo de errado?
Responder1
Você precisa informar awk
que deseja passar valores de variáveis do shell. Algo assim na definição da sua função deve resolver:
function jf {
echo `jobs | awk -v LINENO=$1 -v COLUMNNO=$2 'NR==LINENO {print $COLUMNNO}'`
}
Responder2
As aspas simples fizeram com que o bash não substituísse argumentos. Como manatwork mencionou, as aspas duplas são interpretadas de forma menos estrita.
manatwork escreveu:
awk "NR==$1{print \$$2}"
Ainda assim, a parte "echo `...`" na minha função representou um problema, mas parece que compliquei as coisas e não é necessário. Esta nova função funciona para mim:
function jf {
jobs | awk "NR==$1{print \$$2}";
}