Scripting
為什麼嘗試執行 python 執行檔在通過 FTP 將其傳輸到伺服器後返回“:沒有這樣的文件或目錄”?
我遇到了一個問題,當我通過 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
輸出中的 。