テキストエディタで作成・修正する、スクリプト言語のように扱いたいので、
ソースファイルをコンパイル&実行&実行後にバイナリ削除する
スクリプトを書いてみました〜
プログラムの一部分だけの動作が見たい時に有用...カモです
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
------------------------