Search code examples
pythonhashbang

Python script gives `: No such file or directory`


I have several python scripts which work just fine but one script has (as of this morning) started giving me this error if I try to run it from the bash:

: No such file or directory

I am able to run the 'broken' script by doing python script_name.py and after looking around a bit the general idea that I picked up was that maybe my line ending of the hashbang got changed (silently) so I looked at the line ending of a working script and a broken script via the :set list option in VI as indicated in this question -> View line-endings in a text file

Both files appear to end using the same character (a $) so I am kind of at a loss on how to proceed from here. Specifically, how to actually 'see' the line ending in case the set list was not the right method.

PS: The script is executable and the shebang is in there, I stated that it's just this 1 script that was working fine before the weekend but it started giving me this error as of this morning.

-- edit: --

Running the script through dos2unix does get it working again but I would like to know of any way to visualize the line ending somehow in VI(M) or why Geany somehow converted the line endings in the first place (as I never work on a dos/windows system anyhow).


Solution

  • From the comments above it looks like you have dos line endings, and so the hashbang line is not properly processed.

    Line ending style are not shown with :set list in Vim because that option is only used when reading/writing the file. In memory line endings are always that, line-endings. The line ending style used for a file is kept in a Vim per-file option, weirdly called fileformat.

    To see/change the line ending style from Vim, you can use the following commands:

    :set fileformat
    :set ff
    

    It will show dos or unix. You want unix, of course ;-).

    To change it quickly you can save the file with:

    :w ++ff=unix
    

    Or if you prefer:

    :set ff=unix
    

    And then save the file normally.

    So see all the gory details just do :help fileformat, :help file-formats and :help fileformats