Não foi possível obter um comando para trabalhar com bash -c

0

Eu estou tentando executar um comando para descobrir qual processo está escutando em uma porta específica e não consigo fazê-lo funcionar se o comando for passado como um argumento para bash usando bash -c

netstat -tnlp 2>/dev/null | grep ':10301' 
tcp        0      0 0.0.0.0:10301           0.0.0.0:*               LISTEN      4755/nc

Eu consigo trabalhar se fizer o seguinte e mostrar que o nc está escutando nessa porta

netstat -tnlp 2>/dev/null | grep ':10301'  | grep LISTEN | awk '{print $7}' | cut -d'/' -f1 | xargs -i -n1 cat /proc/{}/cmdline
nc-kl10301

mas se fizer isso usando o bash -c

bash -c "netstat -tnlp 2>/dev/null | grep ':10301'  | grep LISTEN | awk '{print $7}' | cut -d'/' -f1 | xargs -i -n1 cat /proc/{}/cmdline"
cat: /proc/tcp        0      0 0.0.0.0:10301           0.0.0.0:*               LISTEN      4755/cmdline: No such file or directory
    
por rag 09.12.2013 / 15:23

1 resposta

2

Você precisa escapar $ entre aspas duplas,

bash -c "netstat -tnlp 2>/dev/null | grep ':10301'  | grep LISTEN | awk '{print \}' | cut -d'/' -f1 | xargs -i -n1 cat /proc/{}/cmdline"

No seu caso, $7 é interpretado como um parâmetro. Portanto, awk executará {print} , que imprime a linha inteira em vez do campo pretendido.

    
por 09.12.2013 / 15:46