PyCharm编写shell脚本无法运行
背景
我們常常選擇使用PyCharm在本地(Windows)進行開發,然后將文件遠程同步到遠程服務器(Linux)運行程序,但是這樣編寫的shell腳本常常無法運行,出現語法錯誤,因為好幾個朋友和我提到了這個問題,所以這里本文介紹該問題的原因和解決方法。
問題
首先,我們在本地IDE(PyCharm)中創建項目并配置Linux服務器的文件遠程同步(見教程),然后編寫一個test_win.sh文件并在其中寫入如下的測試代碼,然后通過右擊Deployment將其上傳到遠程服務器,這部分遠程同步的操作見我之前的教程。
#!/bin/bash while true doecho "hello" done然后我們使用ssh工具登錄遠程服務器跑這個shell腳本,但是此時卻出現了下圖的錯誤,意思很簡單,我們的語法有誤,但是這么簡單的一段腳本我們可以確認看起來沒有什么問題。
那么問題究竟是因為什么呢?其實,PyCharm對換行符默認的設置是依賴系統的,但是實際上Windows系統的換行符是\r\n而Linux系統的換行符是\n,這就造成我們Windows上寫的文件同步到遠程服務器無法運行。
解決方案
知道了問題的原因,自然就有了解決的方案,首先,關于換行符的設置在PyCharm的File->Settings->Editor->Code Style配置中,下圖是默認配置,可以看到紅色的2處Line separator是依賴于系統的,也就是依賴我們當前安裝PyCharm的所在的Windows系統因此是\r\n符號。
而且,1處此可采用的是Default配置也就是IDE配置,我們首先將其切換為Project模式,這個模式的意思是為每個項目單獨設置Code Style配置且這個設置會覆蓋IDE的設置,如果不切換為這個模式,本項目由于開啟了下面的Enable EditorConfig support會依然按照默認的Project模式的配置,等于我們的修改是無效的,而且由于我們有各種各樣的項目,也不建議修改Default模式的配置。下面的所有解決方案都需要先切換為Project模式。
對于shell腳本無法運行,下面提供兩種解決方案,針對不同的情況:
若該項目只在遠程Linux服務器中運行,如深度學習訓練項目,那么將上圖的Line separator修改為"Unix and macOS (\r)"即可然后點擊Apply然后點擊OK即可配置成功,此時對于新文件就會采用這個配置了。注意,是新文件,因為編輯器沒有權限修改已有腳本中的內容,會存在風險。 因此,現在我們新建一個test_linux.sh的文件,寫入和上面那個腳本一樣的內容,此時可以發現已經如下圖一樣變成了LF,這個表示\n,這就是Linux系統需要的。
然后我們將這個文件同步到遠程并運行,可以看到,運行成功。
若該項目也需要在其他平臺運行,我不想改變其他類型的文件的換行符,那么我們只需要單獨對shell腳本類型的文件進行配置即可(因為其他文件明顯可以正常運行,沒有影響)。我們和上面一樣將Code Style的配置切換為Project模式后展開Code Style菜單欄找到下圖所示的Shell Script并勾選2處所示的為Shell腳本采用\n換行符。
此時我們同上新建文件發現右下角其實還是Windows的CRLF(對應\r\n),但是當我們遠程同步之后,這里就變成了LF表示自動轉換成功,這個腳本Linux也是可以運行的,和上面方法1的效果一致。
總結
以上是生活随笔為你收集整理的PyCharm编写shell脚本无法运行的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux压缩那些事
- 下一篇: pvbrowser安装教程(Linux)