У меня есть скрипт, который раньше работал, который полагается на отправку команд (фактически обрабатываемых имен файлов) процессу, прослушивающему порт, используя TCP. Так что я могу запустить его и сказать, чтобы он слушал, скажем, порт 9999.
В качестве быстрого взлома я бы настроил перенаправление потока на порт 9999 с помощью такой команды, как:
exec 3<> /dev/tcp/127.0.0.1/9999
а затем я мог запустить команду поиска в каталоге, в котором я хотел обработать все мои файлы, например
find . -name "*.xml" -exec printf "$PWD/{} $PWD/{}\r\n" >&3 \;
Я не пробовал это делать с тех пор, как обновился до Lion, но сейчас он не работает, давая мне ответ «Плохой дескриптор файла». У кого-нибудь есть идеи?
Перенаправление на псевдо-файлы / dev / tcp и / dev / udp - это дополнительная функция Bash во время компиляции, которую многие поставщики ОС предпочитают оставлять отключенной. Похоже, Apple присоединилась к клубу. У вас есть несколько вариантов:
Используйте функцию замены процесса Bash следующим образом: exec 3> >(nc localhost 9999)
Если вы делаете это в интерактивном режиме, вы, вероятно, захотите сделать это, когда больше не хотите перенаправлять на сокет TCP: exec 3> /dev/null
Это должно вызвать nc
процесс порожден для выхода.
Скомпилируйте собственный bash с включенной поддержкой псевдофайлов / dev / tcp и / dev / udp и используйте это.
Измените свой скрипт так, чтобы вывод выводился напрямую в nc
вместо этого. Это может быть проблемой, если ваш скрипт перенаправляет вывод на файловый дескриптор 3 несколько раз, а процесс прослушивания не обрабатывает несколько попыток подключения должным образом. Однако он также более портативен, если вам понадобится использовать свой скрипт в системе, которая не предоставляет оболочку Bash.