7 件 見つかりました。

CHALOW Search - hiChangeLog ChangeLog INDEX

あふの表示ディレクトリをEshellで開く方法 [emacs][Eshell][シェル][VBScript(WSH)]

シェル環境としてはMSYSのbashをコマンドプロンプトで開くのがお気に入りであるが、日本語に難があるのが玉にキズ。Eshell => MSYS と辿ってきたのだが、日本語対策としてEshellも考え直してみることにした。

私がシェル環境に求めるものは、コピペ環境、キーバインドなどがあるが、実は第一条件はあふの表示ディレクトリに素早く飛べることである。これができなければ試す気にもならない。というわけでその方法についてメモ。

まずはEshellで指定したディレクトリに飛ぶ関数を作っておく。(Emacs - Hirotake Itoh's memo by PukiWiki

(defun eshell-in-the-directory (targetdir)
  (interactive)
  (let ((dir default-directory))
    (eshell)
    (cd targetdir)
    (eshell-interactive-print (concat "cd " targetdir "\n"))
    (eshell-emit-prompt)
    (cd dir)
    (end-of-buffer)
    ))
以上の関数を外部から呼出せればよい。NTEmacs 22.0.90を用いているのだが、付属のemacsclientwを使うことを考える。gnuclientと違ってemacsウィンドウをアクティブ(フォアグラウンド)にするオプションが無いので、自分でそこまで面倒を見る必要がある。この条件からVBScript(WSH)を用いるのが便利と思う。([2007-4-17-1])以下で、ダブルクォーテーションが2連続な場所は、ダブルクォーテーションで囲まれた中で自分自身をエスケープしているという意味(バックスラッシュではない)。
Option Explicit
''' パスの準備
Dim strArg      ' 引数情報
' WScript.Arguments.Count が引数の数

Dim path
path = WScript.Arguments(0)
path = Replace(path, "\", "/")

''' EShellの起動

Dim objWshShell     ' WshShell オブジェクト
Dim strCmdLine      ' 実行するコマンド

Set objWshShell = WScript.CreateObject("WScript.Shell")
If Err.Number = 0 Then
    strCmdLine = "C:\programs\emacs-22.0.90\22.0.90\bin\emacsclientw.exe -e ""(eshell-in-the-directory \""" + path + "\"")"" -n"
    objWshShell.Exec(strCmdLine)
    objWshShell.AppActivate("emacs@ITOH")
    If Err.Number = 0 Then
        ' successful
    Else
        msgbox "error"
    End If
Else
    msgbox "エラー: " & Err.Description
End If

Set objWshShell = Nothing

以上をEshell.vbsなどと保存しておき、あふから
wscript C:\programs\afx\Eshell.vbs $P
などとパスを引数として渡して起動してやれば、あふの表示ディレクトリをEshellで開くことができる。

ここまでやって、eshellじゃなくってshellだけで充分じゃないかと思うようになったが、試すのはまた後日。

MSYSのコンソールを便利に使う設定のまとめ [Windows][コマンド][シェル]

MinGW及びMSYSに書いたことの再整理。

まずどこでもいいので下記のバッチファイルを作成。mymsys_cmd.bat とかの名前をつける。

@echo off

REM remove '"'
set arg=%~1

REM replace '\' to '/'
set str=%arg:\=/%

REM remove ':'
set str=%str::=%

REM do not forget to add '/' at the beginning
C:\msys\1.0\bin\sh.exe -c "{ export INITIAL_DIR='/%str%'; exec /bin/sh --login; }"

環境変数 INITIAL_DIR を解釈するため、/etc/profile に下記を追加。
if [ "$INITIAL_DIR" == "" ]; then
  cd "$HOME"
else
  cd "$INITIAL_DIR"
fi

これで
C:\programs\mymsys_cmd.bat "$P"
とかやると指定したパス($P)でコンソールを開くことができた。

また、色の見栄えを良くするため、~/.profile に下記を追加するとよい。
export PS1='\[\033]0;\w\007
\033[1;32m\]\u@\h \[\033[1;33m\w\033[0m\]
$ '

MSYS1.0.10をインストールした [Windows][コマンド][シェル]

MSYS-1.0.10をダウンロードしてインストールした。post install process で以下のように言われた

When you install MinGW I suggest you install it to C:/mingw
(replace C: with the drive of your choice).  Then create an
/etc/fstab file with a line that has a value similar to:
C:/mingw /mingw
Press ENTER to continue

カレントシェルとサブシェル [シェル]

カレントシェルとは要は「現在の」シェルである。サブシェルとは、カレントシェルの子プロセスとして走るシェルである。

シェルスクリプトの実行はサブシェルで行われる。ただし「ドットで実行される」ものはカレントシェルで実行される。サブシェルでは、カレントシェルで設定したシェル変数MYNAMEの値が反映されないことがわかる。ただし、exportした変数の値はサブシェルにも引き継がれる。

bash-2.05b$ MYNAME=foo
bash-2.05b$ echo $MYNAME
foo
bash-2.05b$ cat hello.sh
echo "hello, $MYNAME"
bash-2.05b$ bash hello.sh
hello,
bash-2.05b$ . hello.sh
hello, foo

参考:Bourne Shell自習テキスト

bashでリダイレクト [シェル]

bashで

$ ls >log
とかすることで、画面へ出力されるlsの結果をファイルへの書き出しに変更できる。この入出力切り替えの仕組みをリダイレクトと言う。大量のメッセージが画面に出力される場合なんかには、それらをファイルに出力させておいて後からゆっくり見る、といった使用法が便利。

上の記法は実は次の省略形である:
$ ls 1>log
「1」とは「標準出力」を表すディスクリプタの番号である。即ち上記は「標準出力をファイルにリダイレクトせよ」という意味。なので、上記だけではエラーメッセージなどが出力される「標準エラー出力」に関してはファイルにリダイレクトされない。これを扱うには以下のようにする:
$ my_command 1>stdout_log 2>error_log
ディスクリプタが2である標準エラー出力の内容は、error_logファイルに書き出される。

ディスクリプタの出力は他に振り替えることができる。
$ my_command 1>log 2>&1
とすれば、標準出力の内容も標準エラー出力の内容もlogファイルに書き出される。2>&1とは「ディスクリプタ2の出力をディスクリプタ1に振り替えよ」の意。ここで、このリダイレクトは右から評価されることが大事。上記は「エラー出力を標準出力に振り替えよ。んで、標準出力の内容はlogに書き出せ」という意味。つまり次のようにするとうまくいかない:
$ my_command 2>&1 1>log
これは「標準出力の内容をlogに書き出せ。んで、エラー出力は標準出力へ」となるので、結局エラー出力は画面にされてしまうわけである。

bash-2.05b$ ls
bash-2.05b$ touch hoge
bash-2.05b$ ls hoge fuga
ls: fuga: No such file or directory
hoge
bash-2.05b$ ls hoge fuga >log
ls: fuga: No such file or directory
bash-2.05b$ cat log
hoge
bash-2.05b$ ls hoge fuga >log 2>&1
bash-2.05b$ cat log
ls: fuga: No such file or directory
hoge
bash-2.05b$ ls hoge fuga 2>&1 >log
ls: fuga: No such file or directory
bash-2.05b$ cat log
hoge

zshをWindowsで使うにはcygwinが必須 [シェル]

zshは言わずと知れた高機能シェルで人気も高い。

これをWindowsで使うにはcygwinを導入する必要がある。ftp://ftp.blarg.net/users/amol/zsh/ でcygwin不要の移植版が公開されていたようだが、現在はアクセスできない。

bashにおける、ワイルドカードと変数と引用符の関係おさらい [シェル]

manに詳しく出ているが、キモだけメモ。

アスタリスク * (米印) はワイルドカードとして使え、任意長の文字列とマッチする。bashはこのマッチに従い、* をカレントディレクトリのファイル名に展開する。引用符でくくれば展開は行われない。man の Pathname Expansion の項に出ている。

$ ls
fuga    hoge
$ echo *
fuga hoge
$ echo "*"
*
$ echo '*'
*

ドルマーク $ は変数の参照のために使用される。${変数名}はbashによって変数の値に置換される。二重引用符(ダブルクォーテーション)中であっても置換は行われる。引用符(シングルクォーテーション)中ならば置換は行われない。
$ echo ${SHELL}
/bin/bash
$ echo "${SHELL}"
/bin/bash
$ echo '${SHELL}'
$SHELL

Referrer (Inside): [2007-02-04-5]

ChangeLog INDEX
Powered by chalow