<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/chincoondo/">
    <title>ちんこ音頭＠Wiki</title>
    <link>http://w.atwiki.jp/chincoondo/</link>
    <atom:link href="https://w.atwiki.jp/chincoondo/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>ちんこ音頭＠Wiki</description>

    <dc:language>ja</dc:language>
    <dc:date>2006-01-14T00:42:13+09:00</dc:date>
    <utime>1137166933</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/chincoondo/pages/6.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/chincoondo/pages/5.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/chincoondo/pages/2.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/chincoondo/pages/4.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/chincoondo/pages/1.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/chincoondo/pages/3.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/chincoondo/pages/6.html">
    <title>cygwin/bash の設定</title>
    <link>https://w.atwiki.jp/chincoondo/pages/6.html</link>
    <description>
      #contents

cygwin/bash の設定

* 関連リンク
- [[Linux Manpage of Bash&gt;http://www.linux.or.jp/JM/html/GNU_bash/man1/bash.1.html]]
- [[uenox HomePage Cygwin 日本語化&gt;http://uenox.ld.infoseek.co.jp/cygwin/japanese2.html]]

* bash のリソースファイルの読み込みの仕組み

** ログインシェルとして起動した場合の動作

[[Linux Manpage of Bash&gt;http://www.linux.or.jp/JM/html/GNU_bash/man1/bash.1.html]] から引用
&gt;bash が対話的なログインシェルとして起動されるか、
&gt;　--login オプション付きの非対話的シェルとして起動されると、
&gt;/etc/profile ファイルが存在すれば、
&gt;bash はまずここからコマンドを読み込んで実行します。
&gt;このファイルを読んだ後、
&gt;bash は ~/.bash_profile, ~/.bash_login, ~/.profile をこの順番で探します。
&gt;bash は、
&gt;この中で最初に見つかり、
&gt;かつ読み込みが可能であるファイルからコマンドを読み込んで実行します。
&gt;　--noprofile オプションを使ってシェルを起動すれば、
&gt;この動作を行わないようにできます。
&gt;
&gt;ログインシェルが終了するときには、 ~/.bash_logout ファイルがあれば、 bash はこれを読み込んで実行します。

まとめると、
bash は起動時に以下の順でファイルを読み込む
+ /etc/profile
+ ( ~/.bash_profile | ~/.bash_login | ~/.profile ) // 左から最初に見つかったヤツだけを読み込む。

終了時には以下のファイルを読み込む
+ ~/.bash_logout

** 対話的シェルとして起動したときの動作

[[Linux Manpage of Bash&gt;http://www.linux.or.jp/JM/html/GNU_bash/man1/bash.1.html]] から引用
&gt;ログインシェルでない対話的シェルとして起動されると、
&gt;~/.bashrc ファイルがあれば、
&gt;bash はここからコマンドを読み込み、
&gt;実行します。
&gt;この動作は --norc オプションで行わないようにできます。
&gt;　--rcfile file オプションを使うと、
&gt;コマンドの読み込みと実行を ~/.bashrc からでなく file から行わせることができます。

平たく言えば、
~/.bashrc の読み込むってこったな。

** シェルスクリプト実行で起動したときの動作

[[Linux Manpage of Bash&gt;http://www.linux.or.jp/JM/html/GNU_bash/man1/bash.1.html]] から引用
&gt;(例えばシェルスクリプトを実行するために) 非対話的に起動されると、
&gt;bash は環境変数 BASH_ENV を調べ、
&gt;この変数が定義されていればその値を展開し、
&gt;得られた値をファイル名とみなして、
&gt;そこからコマンドの読み込みと実行を行います。
&gt;つまり bash は以下のコマンドが実行されたのと同じように動作します:
&gt;
&gt; if [ -n &quot;$BASH_ENV&quot; ]; then . &quot;$BASH_ENV&quot;; fi 
&gt;
&gt;ただし、
&gt;ファイル名を探すために PATH 環境変数の値が使われることはありません。

BASH_ENV に設定したファイルを読み込むってこったな。

* リソースファイルの設定

早速設定しようかと思ったのだが、PATHの設定でちょっと悩んだ。
WindowsのパスだとC:\～～って形式だけど、
Cygwinだと/cygdrive/d/～って形式になる。
その辺はどうなってんのよ？と。

んで、実験した。

** 実験

まずは環境変数を取得するプログラムを書いてみる

getenv.c

 #include &lt;stdio.h&gt;     // printf
 #include &lt;stdlib.h&gt;    // getenv EXIT_SUCCESS
 
 void usage(const char* appname) {
     printf(
         &quot;usage:\n&quot;
         &quot;%s ENVNAME\n&quot;
         &quot;\tENVNAME\t:環境変数の名前を入れてくだしあ\n&quot;,
         appname);
 }
 
 int main(int argc, char* argv[])
 {
     char* env_value;
 
     if (argc != 2) {
         usage(argv[0]);
     } else {
         env_value = getenv(argv[1]);
 
         if (env_value == NULL)
             env_value = &quot;not defined&quot;;
         printf(&quot;%s:\n\t%s\n&quot;, argv[1], env_value);
     }
 	return EXIT_SUCCESS;
 }

それをコンパールする。
 $ cl.exe getenv.c

んで、Cygwin/bash を起動。
getenv.exe のあるフォルダに移動して、
 $ echo $PATH       // パスの設定を確認
 /bin:/usr/bin
 
 $ ./getenv PATH
 PATH:
         D:\usr\bin\GNU\cygwin\bin;D:\usr\bin\GNU\cygwin\bin

おお！
ちゃんと変換されてる！

ってことは、安心して Cygwin 形式のパスで設定すればいいのか！！

 $ echo $INCLUDE
 /home/dev/Include
 
 $ ./getenv INCLUDE
 INCLUDE:
         /home/dev/Include

ん？あれ？

変換されてないお(;^ω^)
スルーされてるお
これは困ったお。

…ま、いっか。
MinGW開発とかやる予定ないし、GCC使わないし、つか使い方よくわからんし、
欲しいのは開発がらみのサブツールと便利なシェルだし。

ツー訳で、謎は全て解けた！

Cygwin 環境は $PATH は、 WIN＜＞Cygwin の相互変換をするけど、
それ以外は何もしない！

んじゃ設定ファイルゴリゴリかくべ。

** 設定ファイル

$ cat .bash_profile
 source ~/.bashrc


$ cat .bashrc
 # 各種便利設定
 HISTCONTROL=ignoreboth
 HISTFILESIZE=1024
 PS1=&quot;\[\e]0;\w\a\]\n\[\e[32m\]chincoondo@local \[\e[33m\]\w\[\e[0m\]\n\$ &quot;
 
 # 日本語を通すように変更
 # 参考:http://uenox.ld.infoseek.co.jp/cygwin/japanese2.html
 export LANG=ja_JP.SJIS
 export TZ=JST-9
 export JLESSCHARSET=japanese-sjis
 
 # エイリアス設定
 export WINAPP_BASEPATH=&#039;/home/bin&#039;
 alias gvim=&quot;$WINAPP_BASEPATH/vim/gvim.exe&quot;
 alias ls=&#039;ls -a --show-control-chars --color -F&#039;
 
 # 元々のパスを分離しておく
 # 途中で $PATH を戻したくなったときに役に立つ
 export DEFAULT_PATH=$PATH
 
 source ~/bashrc/vcpprc

$ cat ~/bashrc/vcpprc
 # $PATH 以外でWinアプリ用のパス設定を使うヤツ用ショートカッツ
 export WINAPP_BASEPATH_FOR_WIN=&quot;D:\\usr\\bin&quot;
 export VSINSTALLDIR=&quot;$WINAPP_BASEPATH_FOR_WIN\\Microsoft Visual Studio 8&quot;
 export VCINSTALLDIR=&quot;$WINAPP_BASEPATH_FOR_WIN\\Microsoft Visual Studio 8\\VC&quot;
 export FrameworkDir=&quot;C:\\WINDOWS\\Microsoft.NET\\Framework&quot;
 export FrameworkVersion=&quot;v2.0.50727&quot;
 export FrameworkSDKDir=&quot;$WINAPP_BASEPATH_FOR_WIN\\Microsoft Visual Studio 8\\SDK\\v2.0&quot;
 
 echo Setting environment for using Microsoft Visual Studio 2005 x86 tools.
 
 export DevEnvDir=&quot;$WINAPP_BASEPATH_FOR_WIN\\Microsoft Visual Studio 8\\Common7\\IDE&quot;
 
 export PATH=&quot;$WINAPP_BASEPATH/Microsoft Visual Studio 8/Common7/IDE&quot;:\
 &quot;$WINAPP_BASEPATH/Microsoft Visual Studio 8/VC/BIN&quot;:\
 &quot;$WINAPP_BASEPATH/Microsoft Visual Studio 8/Common7/Tools&quot;:\
 &quot;$WINAPP_BASEPATH/Microsoft Visual Studio 8/SDK/v2.0/bin&quot;:\
 &quot;/cygdrive/c/WINDOWS/Microsoft.NET/Framework/v2.0.50727&quot;:\
 &quot;$WINAPP_BASEPATH/Microsoft Visual Studio 8/VC/VCPackages&quot;:\
 $PATH
 
 # 区切り文字 : だとWinアプリが理解しないので ; で区切る
 export INCLUDE=&quot;D:\\usr\\dev\\Include\\boost-1_33_1;&quot;\
 &quot;D:\\usr\\dev\\Include;&quot;\
 &quot;$INCLUDE;&quot;\
 &quot;$WINAPP_BASEPATH_FOR_WIN\\Microsoft Visual Studio 8\\VC\\INCLUDE&quot;
 
 # 区切り文字 : だとWinアプリが理解しないので ; で区切る
 export LIB=&quot;D:\\usr\\dev\\Lib;&quot;\
 &quot;%LIB%;&quot;\
 &quot;$WINAPP_BASEPATH_FOR_WIN\\Microsoft Visual Studio 8\\VC\\LIB;&quot;\
 &quot;$WINAPP_BASEPATH_FOR_WIN\\Microsoft Visual Studio 8\\SDK\\v2.0\\lib&quot;
 
 export LIBPATH=&quot;C:\\WINDOWS\\Microsoft.NET\\Framework\\v2.0.50727&quot;

$ cat ~/.inputrc
 # 参考:http://uenox.ld.infoseek.co.jp/cygwin/japanese2.html
 set kanji-code sjis
 set convert-meta off
 set meta-flag on
 set output-meta on

ツー訳で、こんな感じで出来上がり。
なんかアレだね、zsh に比べると非常にシンプルな感じだ。
本当はもっとおもしろ機能とかあるのかしらねぇ。    </description>
    <dc:date>2006-01-14T00:42:13+09:00</dc:date>
    <utime>1137166933</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/chincoondo/pages/5.html">
    <title>oniguruma のインストール</title>
    <link>https://w.atwiki.jp/chincoondo/pages/5.html</link>
    <description>
      C言語用正規表現ライブラリ oniguruma を Visual C++
2005ExpressEditionでビルド＆インスコする方法を説明します。&lt;br&gt;

&lt;br&gt;
&lt;h3&gt;oniguruma のソースを取得&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.geocities.jp/kosako3/oniguruma/&quot;&gt;oniguruma&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
上記サイトより、Latest
releaseversionをダウンロードして展開する。&lt;br&gt;
ちなみにオレは V3.9.1 をダウンロードしました。&lt;br&gt;
&lt;br&gt;
&lt;h3&gt;oniguruma をスレッドセーフになるように設定する&lt;/h3&gt;
&lt;a href=
&quot;http://www.void.in/wiki/OnigPP&quot;&gt;やる気向上作戦:OnigPP&lt;/a&gt;を参考にしつつ以下のように設定する。&lt;br&gt;

&lt;h4&gt;regint.h&lt;/h4&gt;
&lt;pre&gt;
$ diff -c regint.h regint.h.orig
*** regint.h    Thu Jan 12 23:59:32 2006
--- regint.h.orig       Thu Jan 12 23:47:07 2006
***************
*** 84,99 ****
  #define USE_VARIABLE_META_CHARS
  #define USE_WORD_BEGIN_END          /* &quot;\&amp;lt;&quot;: word-begin, &quot;\&amp;gt;&quot;: word-end */
  #define USE_POSIX_REGION_OPTION     /* needed for POSIX API support */
! // オレ様変更
! // マルチスレッド対応化
! // 詳しくは doc/FAQ.ja をご覧あれ
! #include 
! #define USE_MULTI_THREAD_SYSTEM
! extern CRITICAL_SECTION gOnigMutex;
! #define THREAD_ATOMIC_START EnterCriticalSection(&amp;amp;gOnigMutex)
! #define THREAD_ATOMIC_END LeaveCriticalSection(&amp;amp;gOnigMutex)
! #define THREAD_PASS Sleep(0)
! // /オレ様変更
  #define CHECK_INTERRUPT             /* depend on application */
  #define xmalloc     malloc
  #define xrealloc    realloc
--- 84,93 ----
  #define USE_VARIABLE_META_CHARS
  #define USE_WORD_BEGIN_END          /* &quot;\&amp;lt;&quot;: word-begin, &quot;\&amp;gt;&quot;: word-end */
  #define USE_POSIX_REGION_OPTION     /* needed for POSIX API support */
! /* #define USE_MULTI_THREAD_SYSTEM */
! #define THREAD_ATOMIC_START         /* depend on thread system */
! #define THREAD_ATOMIC_END           /* depend on thread system */
! #define THREAD_PASS                 /* depend on thread system */
  #define CHECK_INTERRUPT             /* depend on application */
  #define xmalloc     malloc
  #define xrealloc    realloc
&lt;/pre&gt;
&lt;h4&gt;regcomp.c&lt;/h4&gt;
&lt;pre&gt;
$ diff -c regcomp.c regcomp.c.orig
*** regcomp.c   Thu Jan 12 23:50:48 2006
--- regcomp.c.orig      Mon Nov 21 21:16:36 2005
***************
*** 29,36 ****

  #include &quot;regparse.h&quot;

- CRITICAL_SECTION gOnigMutex; //これ追    </description>
    <dc:date>2006-01-13T01:04:20+09:00</dc:date>
    <utime>1137081860</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/chincoondo/pages/2.html">
    <title>メニュー</title>
    <link>https://w.atwiki.jp/chincoondo/pages/2.html</link>
    <description>
      メニュー

- [[試してみたいモノリスト]]

***リンク
- [[ちんこ音頭＠ちんぽしーく&gt;http://chincoondo.hp.infoseek.co.jp/]]
- [[ちんこ音頭＠ブログ&gt;http://blog.livedoor.jp/chincoondo/]]

***更新履歴
#recent(20)    </description>
    <dc:date>2006-01-12T23:10:37+09:00</dc:date>
    <utime>1137075037</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/chincoondo/pages/4.html">
    <title>試してみたいモノリスト</title>
    <link>https://w.atwiki.jp/chincoondo/pages/4.html</link>
    <description>
      
&lt;ol&gt;
&lt;li&gt;&lt;a href=
&quot;http://www.boost.org/libs/ptr_container/doc/ptr_vector.html&quot;&gt;boost::ptr_vector&lt;/a&gt;
- ポインタをつっこめるコンテナらしい。&lt;br&gt;&lt;/li&gt;
&lt;/ol&gt;
    </description>
    <dc:date>2006-01-12T23:05:07+09:00</dc:date>
    <utime>1137074707</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/chincoondo/pages/1.html">
    <title>トップページ</title>
    <link>https://w.atwiki.jp/chincoondo/pages/1.html</link>
    <description>
      適当に調べ物の結果なの度をまとめていきます。    </description>
    <dc:date>2006-01-12T22:19:48+09:00</dc:date>
    <utime>1137071988</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/chincoondo/pages/3.html">
    <title>メニュー2</title>
    <link>https://w.atwiki.jp/chincoondo/pages/3.html</link>
    <description>
      **更新履歴
#recent(20)
    </description>
    <dc:date>2006-01-12T06:05:15+09:00</dc:date>
    <utime>1137013515</utime>
  </item>
  </rdf:RDF>
