バッチ的な実行では .erlang が邪魔になることがあります。~/.erlang を使うのをやめるか、ブートスクリプトを作り直すことになるでしょう(僕はやったことありません)。
やってみました。
Erlang/OTPリリースR12B-3 (erl5.6.3) での話ですが、他のリリースバージョンでも同じだと思います。
手順1
$OTP_ROOT/releases/R12B/ に行く。start_clean.script をコピーして start_norc.script という名前のファイルを作る。
手順2
start_norc.script の最後から2行目を削るかコメントアウトする。
{progress,applications_loaded},
{apply,{application,start_boot,[kernel,permanent]}},
{apply,{application,start_boot,[stdlib,permanent]}},
% {apply,{c,erlangrc,[]}},
{progress,started}]}.
手順3
次のコマンドをOSシェルから実行する。
$ erl -boot start_clean -noshell -eval '
> systools:script2boot("start_norc")
> ' -s init stop
$
もちろん、EShellを起動してEShellから systools:script2boot("start_norc").
と入力してもかまいません。これで、start_norc.boot というバイナリファイルができます。
手順4
start_norc.boot を $OTP_ROOT/bin/ にコピーする。
実行
-bootオプションに start_norc を指定する。
$ erl -boot start_norc -noshell \
> -eval 'io:fwrite("Hello.~n")' -s init stop
Hello.
$