Immer wieder passiert es, dass man als Admin auf Probleme stößt, die man an dieser Stelle eigentlich für ausgeschlossen hält, weil einem der auszuführende Befehl viel zu trivial erscheint. Genau so ging es mir, als ich in einer Shell mit cURL einen Webservice abfragen wollte:
curl http://www.example.com?a=1&b=2
Aus unerfindlichen Gründen wurde der Befehl erst nach einem zweiten, zusätzlichen Return abgeschlossen. Der Tipp eines Kollegen brachte mich glücklicherweise auf die Ursache und damit auch auf die Lösung des Problems. In der URL sind mehrere Parameter, jeweils mit einem "&" verknüpft, enthalten. Die Shell interpretiert dieses Zeichen als Ende des davor stehenden Kommandos und führt dieses aus. Der Rest wird dann als neues Kommando interpretiert, das natürlich erst nach einem weiteren Return ausgeführt wird.
Lösen lässt sich dieses Problem, indem man die URL in (doppelte oder einfache) Anführungszeichen setzt oder das "&" mit einem "\" escaped:
# Doppelte Anführungszeichen
curl "http://www.example.com?a=1&b=2"
# Einfache Anführungszeichen
curl 'http://www.example.com?a=1&b=2'
# Escaped
curl http://www.example.com?a=1\&b=2