J'essaie d'exécuter un serveur de réseau qui est censé recevoir des messages udp très courts terminés par une nouvelle ligne. La plist du service ressemble à ceci
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>local.listener</string>
<key>Program</key>
<string>/bin/cat</string>
<key>Sockets</key>
<dict>
<key>Listeners</key>
<dict>
<key>SockType</key>
<string>dgram</string>
<key>SockNodeName</key>
<string>0.0.0.0</string>
<key>SockServiceName</key>
<integer>9999</integer>
</dict>
</dict>
<key>inetdCompatibility</key>
<dict>
<key>Wait</key>
<true/>
</dict>
<key>StandardOutPath</key>
<string>/tmp/test.stdout</string>
</dict>
et il se charge et fait ce qu'il est censé faire (écrire des chaînes de messages sur /tmp/test.stdout). Cependant, je n'arrive pas à remplacer /bin/cat par un shell script qui lit le message dans une variable et me laisse faire quelque chose avec. I pensais que quelque chose comme ceci devrait fonctionner :
#!/bin/sh
read MSG
echo $MSG
mais cela semble bloquer, de même que
#!/bin/sh
/bin/cat
tandis que
#!/bin/sh
exec /bin/cat
fonctionne toujours. En ligne de commande, les trois variantes font à peu près la même chose, par exemple,
$ echo 123 | ./mycat.sh
123
et rien ne bloque. Toute idée concernant ces différences subtiles serait appréciée.