Scripting

為什麼嘗試執行 python 執行檔在通過 FTP 將其傳輸到伺服器後返回“:沒有這樣的文件或目錄”?

  • October 26, 2015

我遇到了一個問題,當我通過 FTP 將 Python 文件傳輸到我的 VPS 並嘗試使用它執行它時,./foo.py我返回錯誤:: No such file or directory.

該錯誤似乎表明我嘗試執行的文件不存在。但是我可以毫無問題地執行該程序,python foo.py這使我相信該錯誤實際上可能意味著其他東西。

起初我認為這可能是 shebang 線路的問題,所以我將文件的所有內容複製並粘貼到 VPS 上尚未通過 FTP 傳輸的新文件中。這兩個文件的內容完全相同,但是當我使用./bar.py它執行新文件時,它按預期執行。

所以我得出的結論是,這可能是傳輸方式的問題。我已經在 ASCII 和二進制之間切換,但是這兩種傳輸方法都給出了相同的錯誤。

有可能阻止這種情況發生嗎?

當文件包含\r\n行終止符而不是時會發生這種情況\n,因為C0 控制程式碼表示“轉到目前行的開頭”。\r

要修復,執行dos2unix foo.py.

範例會話:

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                                       .

特別注意0d3a輸出中的 。

引用自:https://unix.stackexchange.com/questions/211935