1. 程式人生 > >Linux執行指令碼命令提示No such file or directory錯誤的解決辦法

Linux執行指令碼命令提示No such file or directory錯誤的解決辦法

首先了解下基礎知識:

python指令碼中的#!/usr/bin/python

估計有不少人注意過一些python指令碼開頭有這麼行東東: #!/usr/bin/python 它是用來幹嘛的?貌似沒有它對指令碼功能也沒啥影響。它是用來指定用什麼直譯器執行指令碼以及直譯器所在的位置。 以test.py為例,指令碼內容如下: def test():         print 'hello, world' if __name__ == "__main__":         test() 執行指令碼: python test.py 輸出: hello, world 換一種方法執行: ./test.py 會提示出錯,檔案無可執行許可權: -bash: ./test.py: Permission denied 將檔案設為可執行: chmod +x test.py 繼續執行: ./test.py 提示: ./test.py: line 1: syntax error near unexpected token `(' ./test.py: line 1: `def test():' 那是因為系統預設該指令碼是shell指令碼,把它當shell語句執行,當然失敗了。 在前面加上 #!/usr/bin/python 申明l這是個python指令碼,要用python直譯器來執行: ./test.py 輸出: hello, world 這個東東常用在cgi指令碼中,apache啟動cgi指令碼時就靠它來知道這是個python指令碼,執行它需要的python直譯器路徑在哪裡。 有時候寫 #!/usr/bin/python 還是不行,很簡單,因為python直譯器沒有裝在/usr/bin/目錄,改成其所在目錄就行了,或者更通用的方法是: #!/usr/bin/env python

再說明下遇到的問題:

如果在windows中寫好python指令碼測試正常,但是上傳到linux以指令碼方式執行命令時提示No such file or directory錯誤,那麼一般是檔案格式是dos格式的緣故,改成unix 格式即可。一般有如下幾種修改辦法。

一、windows

利用一些編輯器如UltraEdit或EditPlus等工具先將指令碼編碼轉換,再放到Linux中執行。轉換方式如下(UltraEdit):File-->Conversions-->DOS->UNIX即可。

如果只有一個檔案,修改起來還是比較簡單。如果檔案很多,想批量修改那麼就不是一般的麻煩了。

二、linux

1、vim命令檢視修改

檢視

vim開啟檔案,在檢視模式中輸入:進入命令模式,然後再輸入set ff,回車即可檢視檔案格式。

:set ff

修改

vim開啟檔案,在檢視模式中輸入:進入命令模式,然後再輸入set ff=unix,回車即可修改成uninx模式,儲存退出。

:set ff=unix

這個辦法也windows編輯器一樣,適合對少量檔案做修改。

2、工具修改

如果有大量檔案需要修改,推薦使用工具,比較好用的有dos2unix 。centos下直接使用yum install dos2unix安裝。ubuntu下可以安裝tofrodos,具體可以參考之前這篇文章《

Ubuntu 10.04中安裝dos2unix工具》 。

參考連線:

http://www.sijitao.net/1833.html

http://www.111cn.net/sys/linux/43010.htm

最後,講下實際專案中遇到的問題

情景解決1:在nagios平臺下利用python指令碼寫的外掛,始終無法在終端上直接輸入:./test.py執行,必須要python test.py才闊以,導致平臺監控無法執行外掛。上面的方法可以測試下,但是我改了格式依舊是不行,但是最後通過vim直接編寫的python指令碼程式卻可以成功,從windows平臺直接移植過來的不行,所以只能用vim新建來寫指令碼了,最後複製貼上下,沒什麼問題了。最後記得把指令碼程式的許可權改一下,否則nagios會出現return code of 126 for check of service pluginmay not be executable錯誤。

情景解決2:用UltraEdit進行轉換,但是傳到linux下使用set ff檢視仍舊是dos格式,所以又採取了一遍set ff=unix,這下才可以成功執行

--------------------- 作者:小海歌哥 來源:CSDN 原文:https://blog.csdn.net/xiaohaijiejie/article/details/71075096?utm_source=copy 版權宣告:本文為博主原創文章,轉載請附上博文連結!