Не удалось получить команду для работы с bash -c

Я пытаюсь выполнить команду, чтобы узнать, какой процесс прослушивается на конкретном порту, и я не могу заставить его работать, если команда передается как аргумент bash с использованием bash -c

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

Я могу заставить его работать, если я сделаю ниже, и он показывает, что nc прослушивает этот порт

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

но если вы используете 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 

Вам нужно избежать $ в двойных кавычках,

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

В вашем случае $7 интерпретируется как параметр. Таким образом, awk будет запускать {print} который печатает всю строку вместо целевого поля.