.NET2.0(RTM)用の「Monad Beta2」(2)

「set-alias」のエラー

.NET2.0Beta2用「Monad Beta2」から.NET2.0(RTM)用の「Monad Beta2」にアップグレードすると、
MSH起動時に以下のような「set-alias」のエラーが多数発生します。

set-alias : The AllScope option cannot be removed from the alias 'cat'.
At C:\Documents and Settings\All Users\Documents\msh\profile.msh:9 char:10

Monadは以下の「profile.msh」を起動時に読み込みますが、

  • \MSH\profile.msh」
  • 「<マイドキュメント>\MSH\profile.msh」

これらのファイルの「set-alias」の行がエラーとなってしまいます。

内部定義のエイリアス

この問題は、.NET2.0(RTM)用の「Monad Beta2」から「基本的なAliasを内部定義する」仕様に変更された事に起因します。


.NET2.0(RTM)用「Monad Beta2」では、「cat」「cd」などの基本的な「Alias」は、profile.mshが読み込まれる前に内部定義されます。そのため、「profie.msh」でAliasを再定義しようとするとAliasが上書きできずにエラーが発生するのです。

内部定義されるエイリアス

ac, clc, cli, clp, clv, cpi, cpp, cvpa, epal, epcsv
fc, fl, foreach, ft, fw, gal, gc, gci, gcm, gdr
ghy, gi, gl, gm, gp, gps, group, gsv, gu, gv
icm, ihy, ii, ilal, ipal, ipcsv, mi, mp, nal, ndr
ni, nv, oh, rdr, ri, rni, rnp, rp, rv, rvpa
sal, sasv, sc, select, si, sl, sleep, sort, sp, spps
spsv, sv, where, cat, cd, clear, cp, h, history, kill
lp, ls, mount, mv, popd, ps, pushd, pwd, r, rm
rmdir, echo, cls, chdir, copy, del, dir, erase, move, rd
ren, set, type

エラーの回避方法は2つ。

  1. 「profile.msh」のファイル上からset-aliasの二重定義を削除する
  2. 「profile.msh」でエイリアスを削除してから再定義する

1が良いでしょう。



2を実践する場合は以下のように入力します。

エイリアス削除の例
MSH C:\> remove-item alias:cat -force
MSH C:\> set-alias cat  get-content

「set-location」のスコープ

「set-alias」の「-Option」オプションではエイリアスのスコープを定義します。
.NET2.0(RTM)用「Monad Beta2」ではスコープに「None」と「AllScope」が追加されているようです。
#内部定義エイリアスのスコープは「AllScope」です。

エイリアスのスコープ
  • None(.NET2.0(RTM)用「Monad Beta2」から追加)
  • ReadOnly
  • Constant
  • Private
  • AllScope(.NET2.0(RTM)用「Monad Beta2」から追加)

#Noneはどのような挙動なのでしょうか?