FSLの設定ファイルを読み解く

FSLはデフォルトでは、Linuxの場合は、.profile の下、macOS の場合はお使いのシェルに応じて、.bash_profile もしくは .zprofile の下に 以下のような設定が書き込まれます。(6.0.6以降の設定です)

# FSL Setup
FSLDIR=/usr/local/fsl
PATH=${FSLDIR}/share/fsl/bin:${PATH}
export FSLDIR PATH
. ${FSLDIR}/etc/fslconf/fsl.sh

この内容を理解できると、ソフトの設定がわかるようになるので、1行ずつ解説してみます。

  1. # FSL Setup
    • 日本語訳:コメント – FSLの設定をこれから書きます
    • 解説
    • # があると、それ以降はコメントとして、プログラムは読み込みません。この行は、あくまでも読み手が、「あ、ここはFSLの設定のセクションなのね」とわかるためのものです。設定を書く際は、コメントを書く習慣をつけることをおすすめします。

  2. FSLDIR=/usr/local/fsl
    • 日本語訳: /usr/local/fsl を FSLDIR という変数に代入しなさい
    • 解説
    • システムに、FSLの場所を伝える作業をします。
      場所は長いので、変数に代入することが多いです。
      今の場合、FSLをインストールした場所、 /usr/local/fsl を `FSLDIR` という変数に代入しています。
      こうすることで、この後は $FSLDIR と使うことで、 /usr/local/fsl と書かずにすみます。

  3. PATH=${FSLDIR}/bin:${PATH}
    • 日本語訳:これまでのパスの一番最初に $FSLDIR を追加しなさい。
    • 解説
    • インストールしたプログラムをシステムに認識させるために必要なものが「パスへの追加」です。
      パス変数、PATH は、各種のプログラムの実行ファイルがあるディレクトリを記したものになります。
      よかったら、ターミナルから `echo $PATH` とタイプしてみてください。
      そこで出てくる出力は、システムが認識しているプログラムへのパス一覧です。

      読み解き方は、
      パス1:パス2:パス3: というように、あるプログラムへのパスを コロン: でつなげていきます。

      システムはユーザーがあるコマンドをタイプした時、このPATH変数を見に行って、プログラムを探しに行きます。
      大事なことは、パスは順序が大事ということです。パスはとても長いので、システムは時間を節約するために、パスを最初から探しに行って、一番最初にコマンドを見つけた時点で、その後のパスを探すことをやめます。

      たとえば、あるコマンド `cmd1` が、/usr/local/bin と、 /home/brain/bin の中のどちらにもあったとします。

      その時、PATHが

      /usr/local/bin:/home/brain/bin
      

      という風になっていたら、システムは、/usr/local/bin をまず探して、cmd1 を発見したら、それを使います。もし、/home/brain/bin の中にある cmd1 を使いたい場合は、PATH変数を

      /home/brain/bin:/usr/local/bin
      

      と書き換える必要があります。

      今の場合に戻ると、FSLDIR の場所は、PATH の前についていますね。

      PATH=${FSLDIR}/share/fsl/bin:${PATH} は、これまでの変数PATHの前に、${FSLDIR}/share/fsl/bin を追加したものを、新たな PATH として設定しなさいというメッセージです。つまり、FSLは、「自分のプログラムを一番最初に探してくれ!」と主張しているわけですね。

      ちなみに、$PATH と ${PATH} は同じ意味です。{ } を使うことのメリットは、文字列をつなげることができることです。
      今の場合、${FSLDIR}/share/fsl/bin は /usr/local/fsl/share/fsl/bin という意味になります。

      ちなみに、FSL6.0.6から、FSLの実行ファイルの場所が、${FSLDIR}/bin から ${FSLDIR}/share/fsl/bin に変更になりました。注意してください。

  4. export FSLDIR PATH
    • 日本語訳:変数FSLDIR と 変数PATH をエクスポートしなさい
    • 解説
    • エクスポートというのは、あるシェルから新たなシェルを立ち上げた時に、その変数を継承することを意味します。これをしておくことで、プログラムが新たなシェルを立ち上げた際にも変数FSLDIRはそのシェルに引き継がれます。

  5. . ${FSLDIR}/etc/fslconf/fsl.sh
    • 日本語訳:今のシェルの中で、/usr/local/fsl/etc/fslconf/fsl.sh を実行しなさい。
    • 解説
    • この行のポイントは、一番最初にあるドット `.` です。実は、行頭にあるドットは、`source` というコマンドと同義です。つまり、この行は、

      source ${FSLDIR}/etc/fslconf/fsl.sh
      

      と同義ということになります。(マニアックな話をすると sh には source はないですが、それはオタクの話なので、bash や zsh ではということです)
      この `source` というコマンドは、`source ファイル` とした時に、現在のシェルの中でファイルを実行します。
      実際、このコマンドで読み込むファイルには、様々な変数が設定されていることが多いです。
      我々がひとつひとつ設定しなくていいように、前もって設定してくれています。
      実際、/usr/local/fsl/etc/fslconf/fsl.sh を見てみると、以下のような設定が書かれています。

      FSLOUTPUTTYPE=NIFTI_GZ  # <- FSLの出力ファイル形式は .nii.gz になる設定はここから来ています。
      [bash]
      
      これはあくまでも一例です。fsl.sh によって様々な変数が設定されます。bashでは、変数は `env` コマンドで確認できますので、確認してみましょう。
      grep で FSL というキーワードが入っている変数を探してみます。
      
      [bash]
      env | grep FSL
      FSLDISPLAY=/usr/bin/display
      FSL_DIR=/usr/local/fsl
      FSLWISH=/usr/local/fsl/bin/fslwish
      FSLLOCKDIR=
      FSLDIR=/usr/local/fsl
      FSLTCLSH=/usr/local/fsl/bin/fsltclsh
      FSLCONVERT=/usr/bin/convert
      FSLMULTIFILEQUIT=TRUE
      FSLREMOTECALL=
      FSLMACHINELIST=
      FSLGECUDAQ=cuda.q
      FSL_BIN=/usr/local/fsl/bin
      FSLOUTPUTTYPE=NIFTI_GZ
      

      これらは

      . ${FSLDIR}/etc/fslconf/fsl.sh
      

      がシステムにログインした時に読み込まれているからなんです。

以上、たった4行(コメントをいれたら5行)ですが、このFSLの設定が、大事なことをいくつもしているということを文章にしてみました。
こういうものの読み解き方を知るだけで、UNIX系OSがどのように動くかを理解できるので、参考になれば幸いです。

FSLの設定ファイルを読み解く” へのコメント

  1. 福島県で脳神経外科をしている二宮と申します.OS は Windows 10 で,FSL を導入したいと考え,先生の HP を参考にさせていただいております.
    FSL のインストールができず,この場で相談させていただきたく存じます.FSL の HP の instruction に従って,Ubuntu 18.04.5 を導入し,usr/local/fsl のフォルダを作成できました.しかし,FSL のインストール後に,fsl や bet などを Ubuntu に入力しても not found となります.
    先生のこちらの HP の内容を拝見しますと,usr/local/fsl/etc の中に,fslconf/fsl.sh が本来あるべきと推察します.
    しかし,私の場合ですと,usr/local/fsl/pkgs/fsl-base\2303.2-py_0/src/fsl-base/etc/fslconf/fsl.sh に格納されています.
    インストールの際に異なったこととしては,
    ・python “/mnt/c/Users//Downloads/fslinstaller.py” の際に,python3 としなければいけなかった
    ・インストール先の default が home/username/fsl だったため,これを usr/local/fsl へ変更した
    ことでした.
    ご多忙のところ大変恐縮ですが,どうぞよろしくお願い申し上げます.

    • 二宮先生

      すみません、この投稿に気づくのが遅くなりました。

      .profile の記載はどうなっていますでしょうか?

      Ubuntuから

      cat .profile
      

      とした内容を貼り付けていただけませんか?

      あと、ターミナルに以下の内容を一行ずつ貼り付けてみてください。

      FSLDIR=/usr/local/fsl
      PATH=${FSLDIR}/share/fsl/bin:${PATH}
      export FSLDIR PATH
      . ${FSLDIR}/etc/fslconf/fsl.sh
      

      この後に

      bet

      とやると反応しませんでしょうか?

      • 根本先生

         ご返信くださいましてありがとうございます.
         大変お恥ずかしいことですが,installation が 100% となった瞬間に,Ubuntu を私自身で終了していることを繰り返しておりました.
         何度かトライしたあとに,100%の状態で数十分ほど待機してみたところ,installation が完了と表示されました(この時間が大事だったのだと思いました).その後に,Ubuntu で fsl と入力したところ,FSL の画面が立ち上がり,問題なく work しました.fslconf/fsl.sh も,usr/local/fsl/etc 内に格納されていました.
         私の早合点で,installation ができていなかっただけでした.お騒がせしてしまい大変申し訳ございません.その後は,先生の HP を参照させていただき,今のところは FSL を問題なく使用できております.
         FSL や SPM を使っていくにあたり,不明点などを質問させていただくかと存じますので,今後ともどうぞよろしくお願い申し上げます.

        二宮

        • 無事に解決したようでよかったです!おっしゃるように、100%と表示されてから本当に終わるまでは時間がかかるので、そこはキモですね。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください