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