Como obtenho um campo na lista de trabalho do bash usando o awk?

1

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?

    
por bug 10.04.2013 / 16:17

2 respostas

2

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}''
}
    
por 10.04.2013 / 16:43
1

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}";
}
    
por 10.04.2013 / 19:10

Tags