シェルスクリプトに挑戦しよう(2)Windows 10のbashを試す!:“応用力”をつけるためのLinux再入門(22)
Windows 10 Fall Creators Update(バージョン1709)から「Windows Subsystem for Linux(WSL)」の正式版が提供されました。これを有効にすることで「bash」などのシェルが、Windows 10上で利用できるようになります。今回は、Windows 10でbashスクリプトを試す方法を紹介します。
Windows 10でbashを試すには?
Windows 10 では「Windows Subsystem for Linux(WSL)」(※)を有効にすることで、Windowsの中にLinux環境を作成して、「bash」などのLinuxシェルを利用できるようになります。
【※】Windows 10 Fall Creators Update(バージョン1709、x64版)で正式に提供開始。
bashのインストールと起動
Windows 10上でbashを動かすためには、「Windowsシステムツール」→「コントロールパネル」→「プログラム」→「Windows機能の有効化または無効化」で「Windows Subsystem for Linux」にチェックを入れて有効化します(画面1)。
「Windows Subsystem for Linux」にチェックを入れてWindows 10を再起動したら、「Microsoft Store」で“Linux”を検索して、Linuxディストリビューションを選択して購入(無料)します。本連載では「Ubuntu」で動作を確認しています(画面2)。
スタートメニューに「Bash on Ubuntu on Windows」が追加されるので、これをクリックするとbashが起動し、プロンプトが表示されます(画面3)。初回起動時は「Installing, this may take a few minutes」というメッセージが表示され、必要なファイルがインストールされます。
「Installation successful!」というメッセージに続き、Linux用のアカウントを作成するためのメッセージが表示されます。Linux環境で使用する「ユーザー名」と「パスワード」を2回入力すると、「ユーザー名@コンピュータ名:カレントディレクトリ $」というプロンプトが表示されます。
Windows環境からのコピー&ペースト
Windows 10上のbashプロンプト画面では、マウスの右クリックで「クリップボード」の内容をペーストできます。本連載で紹介するコマンド例を右クリック、または[Ctrl]+[C]キーでコピーして、bashを実行している画面に貼り付けると、簡単にコマンドを入力できます。
また、bashプロンプト画面に表示されている文字も、範囲選択して右クリック、または範囲選択して[Ctrl]+[C]キーでクリップボードにコピーできます。
プロンプト画面で範囲選択できない場合は、タイトルバー左端のアイコンを右クリック→「プロパティ」→「オプション」タブ→「編集オプション」の「簡易編集モード」がオンになっているかどうかを確認してください。
WSLでテキストエディタを使用するには?
Windows側からはWSL上のファイルを操作することはできないため、設定ファイルやシェルスクリプトなどを編集するには、WSL上のエディタを使用する必要があります。
Ubuntuには、本連載の第18回〜第20回で解説している「vi」(本連載18回)コマンドの他、「nano」コマンドがインストールされています。nanoコマンドの使用イメージについては前回(本連載第21回)を参照してください。
Windows環境のファイルをWSLから操作するには?
Windows環境からWSL上のファイルを操作することはできません。しかし、WSLからWindows環境のファイルを読み書きすることは可能です。
Windowsで普段使用しているファイルには「/mnt/ドライブ名/〜」でアクセスできます。ドライブ名は「小文字」でマウントされているので、例えば「CドライブのUsersディレクトリ」(ホームディレクトリ用の場所で、Linux環境の「/home」に相当)であれば「/mnt/c/Users」と指定します。
頻繁にアクセスするディレクトリがある場合は、「シンボリックリンク」を作成しておくとよいでしょう。例えば、WSLのホームディレクトリ下にWindowsアカウント名「study」のデスクトップのシンボリックリンクを作成する場合は、以下のように操作します。
$ cd(ホームディレクトリへ移動) $ ln -s /mnt/c/Users/study/Desktop .(デスクトップへのシンボリックリンクを作成する)
なお、ホームディレクトリのパスなどは環境変数に保存されているので、Windowsのコマンドプロンプトで「set」コマンドを実行することで確認できます。
コマンドプロンプトは、スタートメニューの「Windowsシステムツール」→「コマンドプロンプト」を選択するか、[Windows]+[R]キーで「ファイル名を指定して実行」ダイアログボックスを開いて「cmd」と入力することで起動できます。この方法でコマンドプロンプトの画面を開いた場合、自分自身のホームディレクトリがカレントディレクトリとなり(※)、「C:\Users\study>」のようなプロンプトが表示されています。
【※】Windowsのコマンドプロンプトでも「cd」コマンドでカレントディレクトリを変更できますが、Linux環境のcdコマンドとは動作が異なります。Windowsでは「cd」のみを実行した場合は、ホームディレクトリへの移動ではなく、「カレントディレクトリの表示」という動作になります。なお、Windowsの場合カレントディレクトリはドライブごとに保持されており「cd d:\data」でDドライブのカレントディレクトリを「\data」に変更、「cd d:」でDドライブのカレントディレクトリを表示します。
環境変数は「set」コマンドで一覧表示、個々の値は「echo %変数名%」コマンドで参照できます。自分自身のホームディレクトリの場所は「echo %USERPROFILE%」コマンドで確認できます(画面4)。
set
(環境変数を一覧表示:Windows環境)
echo %USERPROFILE%
(環境変数「USERPROFILE」を表示:Windows環境)
ちなみに、WSLからWindowsコマンドを実行することも可能ですが、この場合もWSL上にあるファイルを参照することはできません。
例えば、「メモ帳(notepad.exe)」は「/mnt/c/Windows/System32/notepad.exe &」にあり、Windowsのコマンドプロンプトと同じパスが通っているので「notepad.exe &」で起動できます(※)。
【※】Windowsのコマンドプロンプトでは「.exe」や「.bat」「.cmd」などの拡張子は省略できるので「notepad」のみで実行できますが、WSLでは拡張子を省略できません。
notepad.exe ファイル名 &
(「メモ帳」で指定したファイルを開く。「/mnt/」下のファイルは開けるが、WSL上、例えばホームディレクトリなどのファイルは参照できない)
最後の「&」は「バックグラウンドで実行する」という意味です。このように実行すると、コマンドの終了を待たずに、次のコマンドが入力できるようになります。「&」を付けずに実行すると、メモ帳を終了するまでは次のコマンドを入力できません(※)。
【※】bashの画面では[Ctrl]+[C]キーでbashに制御は戻りますが、Windowsアプリケーションの場合はbashからは終了できません。「&」に興味がある方は、本連載第15回を参照してください(第13回、第14回を踏まえた内容となっています。実行例で紹介しているコマンドは全てWSL上のUbuntuでも実行できますが、表示される内容は異なります。また「kill」コマンドや「killall」コマンドでWindowsアプリケーションを終了させることはできません)。
なお、WSLの画面を開いていても、タスクバーやスタートメニューは普段通り使用できるので、このような方法でWindowsアプリケーションを起動する必要はないでしょう。
Windows環境で作成したシェルスクリプトをWSLで実行するには?
シェルスクリプトの練習ということであれば、Windows環境で作成したテキストファイルを使ってもよいでしょう。
「メモ帳(notepad.exe)」の場合、ファイルを保存すると自動で「.txt」という拡張子が付きます。拡張子があってもシェルスクリプトとして使用できますが、一般的には「拡張子なし」か「.sh」を使用します。メモ帳で拡張子を付けずに保存したい場合は「名前を付けて保存」で「ファイルの種類」を「すべてのファイル」にし、ファイル名を「hello.」のように末尾にドット(.)を付けて保存します。
シェルスクリプト内で日本語を使いたい場合は、「UTF-8」で保存する必要があります。メモ帳の場合、UTF-8で保存するとBOM付き(Byte Order Mark:符号化の種類判別に使用するデータ)となるため、シェルスクリプトには使えません。BOMなしのUTF-8に対応しているテキストエディタを使用しましょう。フリーで使用できるテキストエディタとしては、「TeraPad」や「Visual Studio Code」などがあります。
WSL側でテキストファイルの文字コードを変換したい場合は、「iconv」コマンドを使用します。
Windowsのカレントディレクトリのままでbashを実行する
エクスプローラのアドレスバーで「bash」と入力して[Enter]キーを押すと(画面5)、現在表示しているフォルダの位置をカレントディレクトリとして、bashの画面が開きます。
コマンドプロンプトで「bash」と入力して実行すると、実行時のカレントディレクトリのままでbashを実行できます(画面6)。
Windows環境で保存したテキストファイルは、パーミッションが「0777」となっているため、「chmod」コマンドによる操作なしで「./ファイル名」でシェルスクリプトを実行できます。
- [パーミション参考]「ls -l」コマンドの表示からファイルの属性を理解しよう(本連載 第9回)
今後もこのディレクトリを使用するのであれば、WSLのホームディレクトリからアクセスしやすいように、シンボリックリンクを作成しておくとよいでしょう。以下のコマンドで作成できます。なお、「pwd」は現在のカレントディレクトリを表示するコマンドです。
ln -s `pwd` ~
(現在のディレクトリへのシンボリックリンクをホームディレクトリに作成する)
WSLの色設定について(1)bashのプロンプト
bashのデフォルト設定では、プロンプトに「ユーザー名@ホスト名:カレントディレクトリ$ 」が表示されます。カレントディレクトリは黒地(※)に青い文字で表示されるため、少々読みにくいかもしれません。
【※】黒背景と青い文字は、Windows環境のコマンドプロンプト画面の設定に従っています。設定の変更は、スタートメニューの「Windows Subsystem for Linux」で開いた画面の左上(Ubuntuアイコン)をクリックして表示されるメニューから「プロパティ」→「画面の色」タブにある「画面の文字」と「画面の背景」で行います。
プロンプトの色は、ホームディレクトリの「.bashrc」で変更できます。ディレクトリの表示は「PS1=」の行の「\[\033[01;34m\]\w」部分なので、例えば「\[\033[00;36m\]\w」(暗い水色)にすると見やすくなります。色と番号の対応については、後述する表を参照してください。
「nano」コマンドの場合、[CTRL]+[W]キーで「PS1」(プロンプトの表示を設定するシェル変数)を検索するか、画面7を参考に矢印キーで該当箇所まで移動して変更してください。修正したら[CTRL]+[X]キーで終了します。画面下部に確認メッセージが表示されるので、画面に従い[Y]キーで保存します。

画面7 ホームディレクトリの「.bashrc」を編集して、「\[\033[01;34m\]\w」を「\[\033[00;36m\]\w」に変更。「vi(vim)」コマンドの場合、「1」にカーソルを合わせて「r」「0」で、「1」を「0」に変更できる(本連載第20回参照)
viコマンドの場合、Ubuntuで設定されているデフォルトの色設定ではコメント行(#以降)が暗い青で表示されるため、黒地での表示では読みにくいでしょう。この場合「vi -u NONE .bashrc」のように「-u NONE」を付けて実行することで、設定ファイルを使用せずに起動できます。viの表示色を変更したい場合は「【参考】vimのカラースキームを変更するには」を参照してください。
修正したら「. .bashrc」を実行するか(※)、bashプロンプトを開き直すと設定が反映されます。
$ cd(ホームディレクトリへ移動する) $ nano .bashrc(nanoコマンドで.bashrcを編集する:viコマンドを使用する場合) $ vi -u NONE .bashrc $ . .bashrc(修正した設定内容を反映させる)
【※】「. .bashrc」は「source .bashrc」と同じ意味で、現在実行中のシェル(bash)で「.bashrc」を実行します。これによって、「.bashrc」に書かれた内容が反映されます。
WSLの色設定について(2)lsコマンドのカラー表示
WSLのUbuntuでは「ls」コマンドがカラー表示になるよう設定されており、こちらもディレクトリ名が青で表示されます。
ディレクトリ名の色を変更したい場合は、「dircolors」コマンドの「-p」オプションで現在の設定を出力してホームディレクトリの「.dircolors」に保存し、ディレクトリ用の設定を修正します。「DIRスペース」を検索すると、該当箇所にジャンプできます(画面8)。
「.dircolors」を修正したら「eval `dircolors -b .dircolors`」を実行するか(※)、bashプロンプトを開き直すと設定が反映されます。
【※】lsコマンドの表示色は環境変数「LS_COLORS」で設定します。「dircolors -b .dircolors」は「.dircolors」ファイルに従って環境変数LS_COLORSを設定するためのコマンドラインを生成するという意味で、evalコマンドによってdircolorsで生成したコマンドラインを実行しています。
$ cd(ホームディレクトリへ移動) $ dircolors -p > .dircolors(現在のlsコマンドの色設定を.dircolorsに保存する) $ nano .dircolors (nanoコマンドで.dircolorsを編集する) $ eval `dircolors -b .dircolors`(.dircolorsの内容を現在の設定に反映させる)
PS1およびdircolorsでは、「設定1;設定2」という2つの数字で表示色を設定します。使用できる数字は以下の通りです。
文字色の指定 | 背景色の指定 | |
---|---|---|
00 | デフォルト | |
01 | 強調(明るい色、太字) | |
04 | 下線 | |
07 | 反転 | |
※1桁目の「0」は省略可能 |
文字色の指定 | 背景色の指定 | 文字色の指定 | 背景色の指定 | |
---|---|---|---|---|
30 | 黒 | 40 | 黒 | |
31 | 暗い赤 | 41 | 暗い赤 | |
32 | 暗い緑 | 42 | 暗い緑 | |
33 | 暗い黄(オレンジ) | 43 | 暗い黄(オレンジ) | |
34 | 暗い青 | 44 | 暗い青 | |
35 | 暗い紫(マゼンダ) | 45 | 暗い紫 | |
36 | 暗い水色(シアン) | 46 | 暗い水色(シアン) | |
37 | 暗い白(薄いグレー) | 47 | 暗い白(薄いグレー) |
文字色の指定 | 背景色の指定 | 文字色の指定 | 背景色の指定 | |
---|---|---|---|---|
90 | 明るい黒(濃いグレー) | 100 | 明るい黒(濃いグレー) | |
91 | 明るい赤 | 101 | 明るい赤 | |
92 | 明るい緑 | 102 | 明るい緑 | |
93 | 明るい黄 | 103 | 明るい黄 | |
94 | 明るい青 | 104 | 明るい青 | |
95 | 明るい紫 | 105 | 明るい紫 | |
96 | 明るい水色 | 106 | 明るい水色 | |
97 | 白 | 107 | 白 |
【参考】vimのカラースキームを変更するには?
CentOSやUbuntuでは、viはvimコマンドへのシンボリックリンクとなっています。vimはシェルスクリプトや、よく使われる言語の文法に対応しており、カラースキームを選択することで表示色を変更できます。
ここでは、デフォルトで用意されているカラースキームを使う方法を簡単に紹介します。本稿で紹介している画面では、Windows 10上のUbuntu環境を使用していますが、もちろん他の環境でも同じです。
表示色を変更したい場合、まずはデフォルトで用意されているカラースキームを試してみるとよいでしょう。インストールされているカラースキームは「ls /usr/share/vim/vim80/colors/」で確認できます(画面9)。「スキーム名.vim」というファイルがカラースキームです。ディレクトリ名の「vim80」部分はバージョンによって異なります(※)。
$ ls /usr/share/vim/vim74/colors/
【※】筆者が試した環境では、WSL環境ではなく、ネイティブ版のUbuntu 18.04LTSのデフォルトでインストールされていたviコマンドはSmall versionで、後述する「:colo」が使用できず、カラースキームファイルもインストールされていませんでした。「sudo apt upgrade vim」でvimパッケージをアップグレードすることで通常版になり、「/usr/share/vim/vim80/colors/」にカラースキームファイルがインストールされます。
例えば、「pablo」というカラースキームを使用する場合、ホームディレクトリの「.vimrc」(~/.vimrc、存在しない場合は作成)に以下の行を追加します。
~/.vimrcの設定例
colorscheme pablo
自分用に新しいカラースキームを追加する場合は、「~/.vim/colors/」ディレクトリにカラースキームファイルを保存します。カラースキームは以下のサイトなどでダウンロードできます。
- 公式サイト:Vim - the ubiquitous text editor(「Search for Vim Scripts」で「color scheme」を検索)
- ~/.vim/colors
以下では、公式サイトから「molokai.vim」をダウンロードし、カラースキームとして「molokai」を指定しています。この設定で、「/etc/bash.bashrc」(CentOSでは「/etc/bashrc」)を実行すると画面10のようになります。
$ mkdir -p ~/.vim/colors/(ホームディレクトリにカラースキーム用のディレクトリを作成) $ cd ~/.vim/colors/(カラースキーム用のディレクトリへ移動) $ curl http://www.vim.org/scripts/download_script.php?src_id=9750 > molokai.vim(開発サイトより「molokai.vim」という名前でダウンロード) $ cd(ホームディレクトリへ移動) $ echo colorscheme molokai >> .vimrc(.vimrcに設定行を追加)
vim実行中にカラースキームを変更することもできます。この場合は、「:」に続けて「colo スキーム名」と入力します。「colo」は「colorscheme」の省略表記です。画面11は「:colo ron」を実行した画面です。なお、現在の設定は「:colo」で確認できます(※)。
【※】筆者が試した限り、WSLのUbuntuでvimでは、背景色付きのカラースキーム(blueやshineなど)を.vimrcで設定した場合には、画面全体の背景色がうまく切り替わらないことがありました。
色が変更されない場合は、「/etc/vimrcまたは/etc/vim/vimrc」で「syntax on」が設定されていることを確認してください。設定されていない場合は、「~/.vimrc」に「syntax on」という行を追加します。
vimのオプションおよび設定ファイルについては本連載第19回を参照してください。
筆者紹介
西村 めぐみ(にしむら めぐみ)
PC-9801NからのDOSユーザー。PC-486DX時代にDOS版UNIX-like toolsを経てLinuxへ。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『Accessではじめるデータベース超入門[改訂2版]』『macOSコマンド入門』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。
Copyright © ITmedia, Inc. All Rights Reserved.