サイトウという者です。
ruby-1.6.6です。

sh = Shell::cd( '~/foo' )

で

shell: current dir: /home/saito/foo/~/foo

というパスになってしまい、その後の
sh.foreach などで失敗してしまいます。

Shell$expand_path で パスのアタマが '/' だけでなく '~' のときも
普通に File::expand_path したほうが良いのではないでしょうか。

それと、 Shell.cd Shell#cd では存在しないパスで例外を発生させた方が
よさそうな気がします。

1.7系では修正されている問題だったらごめんなさい。

以下(~/の問題だけの)パッチです。

$ diff -u shell.rb.org shell.rb
--- shell.rb.org        Thu Feb 21 13:06:46 2002
+++ shell.rb    Thu Feb 21 13:06:50 2002
@@ -116,7 +116,7 @@
   attr_reader :process_controller
 
   def expand_path(path)
-    if /^\// =~ path
+    if /^[\/~]/ =~ path
       File.expand_path(path)
     else
       File.expand_path(File.join(@cwd, path))

-- 
Hiroshi Saito <HiroshiSaito / pob.org>