Isso acontece quando um arquivo contém \r\n
como terminador de linha em vez de \n
, pois \r
é um controle de C0 código que significa "ir para o começo da linha atual".
Para corrigir, execute dos2unix foo.py
.
Exemplo de sessão:
ben@joyplim /tmp/cr % echo '#!/usr/bin/env python' > foo.py
ben@joyplim /tmp/cr % chmod +x foo.py
ben@joyplim /tmp/cr % ./foo.py
ben@joyplim /tmp/cr % unix2dos foo.py
unix2dos: converting file foo.py to DOS format ...
ben@joyplim /tmp/cr % ./foo.py
: No such file or directory
ben@joyplim /tmp/cr % ./foo.py 2>&1 | xxd
0000000: 2f75 7372 2f62 696e 2f65 6e76 3a20 7079 /usr/bin/env: py
0000010: 7468 6f6e 0d3a 204e 6f20 7375 6368 2066 thon.: No such f
0000020: 696c 6520 6f72 2064 6972 6563 746f 7279 ile or directory
0000030: 0a .
Especificamente, observe o 0d3a
na saída.