テキストエディタで作成・修正する、スクリプト言語のように扱いたいので、
ソースファイルをコンパイル&実行&実行後にバイナリ削除する
スクリプトを書いてみました〜
プログラムの一部分だけの動作が見たい時に有用...カモです
2008-11-25 修正 - Linux 版で引数を処理出来ていなかった
■■■ Windows 版 ■■■
以下のバッチファイルを作成して
引数に C# のソースファイルを与えてください
※ PATH が通っているとこに、バッチファイルを置いて
ファイル(.nets とか?)に関連づけると楽かもしれません
--- dotnet-script.bat ---
@echo off set TMPFILENAME=%~n1 set CSCVER="" FOR /F "tokens=1 delims= " %%i IN ('dir /A:D /B /O:N "%windir%\\Microsoft.NET\Framework" ') DO ( set CSCVER=%%i ) set CMDPIDLAST="" FOR /F "tokens=2 delims= " %%j IN ('tasklist /FI "IMAGENAME eq cmd.exe" /FO table /NH ') DO ( set CMDPIDLAST=%%j ) set RANDSIX=%RANDOM:~-10,1%%RANDOM:~-10,1%%RANDOM:~-10,1%%RANDOM:~-10,1%%RANDOM:~-10,1%%RANDOM:~-10,1% set time2=%time: =0% set tmpexe=%TMPFILENAME%_%date:~-10,4%%date:~-5,2%%date:~-2,2%%time2:~0,2%%time2:~3,2%%time2:~6,2%_%CMDPIDLAST%_%RANDSIX%_cs.exe REM REM once compile REM "%windir%\Microsoft.NET\Framework\%CSCVER%\csc.exe" /out:%TMP%\%tmpexe% /target:winexe %1 %TMP%\%tmpexe% %2 %3 %4 %5 %6 %7 %8 %9 del /Q %TMP%\%tmpexe% REM pause exit
■■■ Linux 版 ■■■
以下のシェルスクリプトを作成、実行権限を与え、
引数に C# のソースファイルを与えてください
--- dotnet-script ---
#! /bin/bash # # need mono-gmcs, and winforms # # (sudo) apt-get install mono-gmcs libmono-winforms2.0-cil # OR # (sudo) apt-get install mono-smcs libmono-winforms2.0-cil # # # use # basename, cat, chmod, date, dirname, echo, expr, pwd, rm, sed, touch, # # # usage: mono-script file # PG_MONOCOMPILER='/usr/bin/gmcs' PG_MONORUN='/usr/bin/mono' MONO_SHELLTMP='/tmp' if [ ! -f "$1" ]; then echo "usage: dotnet-script file" exit 1 fi BINNAME_HEAD=`basename "${1}"` SH_DIR=`echo $(cd $(dirname $1);pwd)` #cd "${SH_DIR}" rndstr=`expr $RANDOM % 10000` INPUT_SRC="${MONO_SHELLTMP}"'/.'"${BINNAME_HEAD}"'_'`date +%Y%m%d%H%M%S`'_'"$$"'_'"${rndstr}"'.cs' OUTPUT_BIN="${MONO_SHELLTMP}"'/.'"${BINNAME_HEAD}"'_'`date +%Y%m%d%H%M%S`'_'"$$"'_'"${rndstr}"'_cs.exe' ### debug #echo "${OUTPUT_BIN}" ### touch "${INPUT_SRC}" chmod 600 "${INPUT_SRC}" touch "${OUTPUT_BIN}" chmod 600 "${OUTPUT_BIN}" ### cat "${BINNAME_HEAD}" | sed -e '1d' >"${INPUT_SRC}" cp "${BINNAME_HEAD}" "${INPUT_SRC}" chmod 600 "${INPUT_SRC}" if ${PG_MONOCOMPILER} -reference:System.Windows.Forms "${INPUT_SRC}" -out:"${OUTPUT_BIN}" ; then chmod 600 "${OUTPUT_BIN}" ${PG_MONORUN} "${OUTPUT_BIN}" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9" fi rm -rf "${INPUT_SRC}" rm -rf "${OUTPUT_BIN}" exit 0------------------------