這個隨筆涉及到幾個批處理腳本得知識點。
windows的start命令, 啟動另一個窗口運行指定的程序或命令。
windows的call命令, 從批處理程序調用另一個程序, 直到被調用程序退出, 再繼續原先的批處理程序
參數: windows, %0為shell 本身, %1為第1個參數, 以此類推
linux, $0為shell 本身, $1為第1個參數, 以此類推
返回值: windows:當一個命令完成后, 可以使用 %errorlevel% , 獲得 exit code
linux: 可以使用$?得到上個命令的exit code
永久環境變量:
windows, 在操作系統環境變量中設置的變量
linux: 在profile文件中, 使用export命令定義的變量
臨時環境變量:
windows, 在前一個bat中使用 Set 命令設置了一個環境變量, 后面的bat文件就可直接使用該環境變量
linux, 在前一個script使用=號設置了一個環境變量, 后面的script文件拿不到該變量值, 除非使用export命令, 也即是說=設置的環境變量作用域是local的, export設置的變量時global的.
windows是不區分local變量和global變量的做法, 會pollute變量的. 為此windows 引入了 setlocal 和 endlocal命令, 在這兩個命令直接set的變量即為local變量, 否則就是global變量.
下面是一個 Windows 示例, 啟動python程序, 中間涉及到PYTHONPATH環境變量, 我采用了 setlocal 方式, 避免污染OS的PYTHONPATH環境變量.
rem --- batch file: fron_profile.bat
SET MY_PYTHON=C:pythonenvpython27_flaskScriptspython.exe
SET PACKAGE_PARENT_PATH=D:trunkCronAnyWheresrc
SET PYTHONPATH=%PACKAGE_PARENT_PATH%
rem --- batch file: fron_importfromcrontab.bat
setlocal
call fron_profile.bat
%MY_PYTHON% %PACKAGE_PARENT_PATH%frondeamonfron_importfromcrontab.py app_domain=%1 crontab_file=%2
endlocal
rem --- batch file: fron_timeoutmonitor.bat
setlocal
call fron_profile.bat
%MY_PYTHON% %PACKAGE_PARENT_PATH%frondeamonfron_timeoutmonitor.py
endlocal