2012年7月8日日曜日

eshellのalias登録したコマンドで引数が処理されない

[環境]
OS: Windows 7 Home Premium Service Pack 1
Emacs: emacs 23.3-3

[背景]
JDK SE 7u5をインストールし、eshell上で java や javac などのコマンドを入力すると出力が文字化けする。
こちらの記事などを参考にしたところ、java には -Dfile.encoding=UTF-8 というオプションを、 javac には -J-Dfile.encoding=UTF-8 というオプションをそれぞれ指定して、出力されるメッセージの文字コードを指定してあげれば良いことが分かった。
eshell上で java -Dfile.encoding=UTF-8 と打っても、文字化けせずにヘルプが表示される。

alias java 'java -Dfile.encoding=UTF-8'
alias javac 'javac -J-Dfile.encoding=UTF-8'

と alias を登録し、いざ javac Foo.java と何かをコンパイルしようとしたら、表示されるのはヘルプのメッセージ。(ただ javac と入力した場合と同じメッセージ)
何度試しても同じ結果で、どうやら引数を受け取ってない模様…。

[問題]
eshellで
alias java 'java -Dfile.encoding=UTF-8'
alias javac 'javac -J-Dfile.encoding=UTF-8'
などとエイリアス登録し、 java foo とコマンドを入力しても、fooなどの引数がプログラムに渡されない

[解決策]
EmacsWikiに書いてありました。
alias java 'java -Dfile.encoding=UTF-8 $*'
alias javac 'javac -J-Dfile.encoding=UTF-8 $*'
最後に $* をつけて、引数をjavaなりjavacなりに渡しますよということを明示的に書かないといけないらしい。
bashとかだと、aliasって単純に 'java'って文字列を'java -Dfile.encoding=UTF-8'って文字列に置き換えるだけだったと思っていたので(違ったらすいません)、eshellも同じかと思い込んでおりハマリました。

0 件のコメント:

コメントを投稿