Вы перенаправляете вывод присвоения переменной.Поскольку присваивание переменных не производит никакого вывода, ваше перенаправление ничего не делает.
Обратные метки фиксируют стандартный вывод команды;вам нужно перенаправить stderr этой команды, что означает, что перенаправление должно быть между обратными чертами.
Моя первая мысль была сделать это:
pid=`/usr/local/bin/lsof | grep 16752 | grep LISTEN | awk '{print $2}' 2>/dev/null`
, но это только перенаправляет stderr изawk
команда.Вам нужно отказаться от stderr всего конвейера:
pid=`(/usr/local/bin/lsof | grep 16752 | grep LISTEN | awk '{print $2}') 2>/dev/null`
Но лично я предпочитаю $(...)
обратным ссылкам:
pid=$((/usr/local/bin/lsof | grep 16752 | grep LISTEN | awk '{print $2}') 2>/dev/null)
(Обратите внимание, что я перенаправляю только stderr, а не stdout; вам нужен стандартный вывод для назначения переменной.)