shell腳本兼容linux/unix與windows/cygwin的基礎
在notepad上設置:編輯->檔案格式轉換->轉換為UNIX格式
另外我覺得在自己使用的編輯器上顯示回車、換行符也許是個好的習慣吧
關於回車換行問題,我的”痛苦“經歷(傳遞的字符串參數有\r字符)
原由:我需要cygwin下運行shell 腳本;腳中調用python子腳本且同時傳遞參數
我的腳本內容是這樣的(調用的python腳本中會打印傳遞給他的參數)
===============================================
#!/bin/sh
# ============================
# funcion:
# autor:luogw
# date:2013/6/27
# usage(in cygwin): ./checkCompatibility checedFileName(.csv format) newFileName(.csv format,Added Compatibility problem)
# ============================
tempFileName='temp4Compatibility.csv'
rm -f temp4Compatibility.csv
python ./cleanPath.py $1 $tempFileName
python ./checkNew.py temp4Compatibility.csv $2 filter.csv filter_key.csv
rm -f $tempFileName
================================================
運行情況如下:大家請注意 tempFileName的值,傳給python腳後!添加了\r\r
我們先看看腳本windows文檔格式與unix文檔格式載圖,顯示回車換行符;notepad的設置 : 視圖->顯示字符->顯示所有字符
windows格式(出問題時腳本的狀態)
unix格式(ok的狀態)
個人理解:
在cygwin/類unix環境下運行的腳本,如果shell腳本是於windows文檔格式保存的(有回車,換行符)
因為unix環境下shell會把回車符"\r"當普通的字符處理,故會造成字符串追加。
另外windows文檔格式的shell腳本,在linux/unix環境下運行時是會出現:bash: ./checkCompatibility.sh: /bin/sh^M: 壞的解釋器: 沒有那個文件或目錄 (解決方案就是去掉回車了,轉給unix文檔格式)
但是cygwin環境下是可以正常運行的,很變戀吧,但想想它本身實現就是在windows下提供類unix的運行環境,它能處理windows文檔格式的shell腳本也是不可厚非的事
只是得需要注意我今天所遇到的問題