Ubuntu Weekly Recipe

第18回あえてターミナルを使う(1):ターミナルに関する設定

Ubuntuでは、ほとんどの操作をGUIから行えるように配慮されていますが、中身はLinuxですので、各種コマンドを直接利用することもできます。何回かに分けてターミナル(端末)を利用したレシピをお届けします。

今回はまず第一回として、端末を頻繁に使う場合のノウハウを中心にお伝えします。

Ubuntuでのターミナル

Ubuntuでは、ターミナル(gnome-terminal)は、⁠アプリケーション⁠⁠→⁠アクセサリ⁠⁠→⁠端末]からアクセスできます。積極的に利用する場合、やや問題になる点が幾つかありますので、必要に応じて設定を行ってください。

まず、gnome-terminalは、デフォルトでは一部の文字の文字幅を正しく扱えません。問題になりうるのは、多くの場合は■や△、○などといった記号です。

図1 文字幅が正しく扱われていないターミナル
図1 文字幅が正しく扱われていないターミナル

このような問題に遭遇した場合、環境変数としてVTE_CJK_WIDTH=1をセットし、さらに、gnome-terminalの引数に--disable-factoryを与えることで、これらの文字の文字幅を正しく扱わせることができます。

図2 文字幅が正しく扱われるようになったターミナル
図2 文字幅が正しく扱われるようになったターミナル

ランチャに登録する場合は、図3のように「/bin/sh -c "VTE_CJK_WIDTH=1 gnome-terminal --disable-factory"」と登録し、/bin/shなどから起動させるのが良いでしょう。

ただし、VTE_CJK_WIDTH=1設定には罫線周りなどの表示が正しくなくなる副作用もあるため、標準のターミナルも残しておく必要があります。パネルなどに登録するショートカットとしてこれらを利用してください。

図3 VTE_CJK_WIDTH=1を指定したランチャ
図3 VTE_CJK_WIDT

もうひとつ、ターミナルを利用する上で問題になるのは、⁠デスクトップ」などといった日本語ディレクトリ名です。ターミナルでは日本語入力をOffにしたまま操作するのが普通ですから、⁠cd デスクトップ」などという操作を行う場合は、⁠cdと入力した後、日本語入力をOnにし(全角/半角なりAlt+~を押し⁠⁠、デスクトップと入力してからEnter」などという、面倒な入力を行う必要があります。

こうした面倒な操作を行いたくない場合、これらのディレクトリ名を英語にすることをお勧めします。以下のコマンドを実行することで設定ダイアログが表示されますので、変更を行ってください。

$ LANG=C xdg-user-dirs-gtk-update

別の方法としては、日本語ディレクトリ名はそのままにしておき、ln -s デスクトップ Desktopなどとして、シンボリックリンクを貼ってしまうのも良いでしょう(ただし、あまり想定されている動作ではないので、特段の理由がなければxdg-user-dirs-gtk-updateで設定を変更することをおすすめします⁠⁠。

また、⁠そもそもHOMEディレクトリの直下にこれらのファイルがあるのがイヤだ」という場合、ユーザ単位であれば~/.config/user-dirs.dirsに、システム単位では/etc/xdg/user-dirs.confに設定ファイルがあります。このファイルは以下のように、単に変数を列挙するだけですので、手動で編集し、~/XDG/Desktop、などといったディレクトリを指定することも可能です。なお設定後も、既存のファイルは自動的には移動されませんので、そちらも手動で行う必要があります。

~/.config/user-dirs.dirsのサンプル
# This file is written by xdg-user-dirs-update
# If you want to change or add directories, just edit the line you're
# interested in. All local changes will be retained on the next run
# Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped
# homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an
# absolute path. No other format is supported.
# 
XDG_DESKTOP_DIR="$HOME/Desktop"
XDG_DOWNLOAD_DIR="$HOME/Desktop"
XDG_TEMPLATES_DIR="$HOME/Templates"
XDG_PUBLICSHARE_DIR="$HOME/Public"
XDG_DOCUMENTS_DIR="$HOME/Documents"
XDG_MUSIC_DIR="$HOME/Music"
XDG_PICTURES_DIR="$HOME/Pictures"
XDG_VIDEOS_DIR="$HOME/Videos"

/bin/shの正体は?

ターミナルを多用するようになると、シェルスクリプトを利用する機会が増えてきます。このような場合に、⁠最近のLinux環境」に特有の問題が起こることがあります。最近のLinux環境では、伝統的なUnix環境とは異なり、bourn shellはインストールされず、/bin/shがbashのシンボリックリンクになっています。

そして一方では、bashは/bin/shとして呼び出された場合も、bashで拡張された機能をそのまま提供してしまいます。このため、Linux向けのシェルスクリプトの一部では、⁠/bin/shを使うようにshebangが指定されているにもかかわらず、実際にはbashでなければ動かない」というものが存在します。

このようなシェルスクリプトを実行させた場合、Ubuntu(やDebian)では/bin/shはbashのシンボリックリンクではありませんので、動作しません。Ubuntuの/bin/shはdash(Debian Almquist Shell)のシンボリックリンクで、これはbashとは異なり、bourne shellそのものに限りなく近い動作を行います。このため、/bin/shがbashであることを期待する(あまり適切でない)シェルスクリプトは、Ubuntu上ではエラーを吐くことがあります。

典型的なのは、以下のようなスクリプト(/test.sh)です。select文はbashの機能ですので、/bin/shを指定している限り、本来であれば動作すべきではありません。

#!/bin/sh

echo Please select 
select i in Alpha Bravo Charlie Delta
do 
  echo "Your selection is $i."
done

Ubuntuで実行した場合、以下の実行例のように、エラーが出力されて終了します。

$ ./test.sh
Please select
./test.sh: 4: select: not found
./test.sh: 5: Syntax error: "do" unexpected

このような「行儀の悪い」スクリプトへの対処方法は二種類あります。

まず一つは、問題のシェルスクリプトのshebangを/bin/shから/bin/bashへ修正してしまうことです。こちらはあまり副作用はありませんので、ほとんどの場合にお勧めします。

しかし場合によっては、shebangを単に修正しただけではスクリプトが機能しなくなることがありえます(つまり、⁠/bin/shという名のbash」では動作するが、bashでは動作しない⁠⁠。場合によっては、修正すべきスクリプトがあまりに大量で、適切な編集を加えきれないことも考えられます。

このような場合、Ubuntuでも/bin/shをbashのシンボリックリンクに差し替える手段が提供されています。設定が必要な場合、以下のコマンドを実行してください。

# sudo dpkg-reconfigure dash

実行すると「Install dash as /bin/sh?」と確認されますので、を選択することでbashが利用されるようになります。元に戻す場合は再度実行し、を選択してください。これにより、先ほどのスクリプトが動作するようになります。

$ ./test.sh
Please select
1) Alpha
2) Bravo
3) Charlie
4) Delta
#? 3
Your selection is Charlie.
#? 2
Your selection is Bravo.
 

とはいえ、ご自身でシェルスクリプトを書かれる場合は、/bin/shを指定したのであればきちんとbourne shellの機能だけで完結させるべきで、これは「他人が書いたスクリプトをどうしても動かさなくてはいけない」といった場合の最後の手段です。

表示言語を切り替える

ターミナルで利用される言語は、原則として環境変数LANGで指定されたものが使われます。Ubuntuの標準的な日本語環境ではja_JP.UTF-8が利用されます。この設定では多国語対応の影響で、エラーメッセージなどは日本語リソースを用いて出力されます。

しかし、既存のドキュメントを参考にする場合や、検索エンジンを利用する場合、また、ソースコードでエラーメッセージを探す場合などには、日本語のメッセージではヒットしないことが多々考えられます。

このような場合は、export LANG=Cを実行して、英語出力に切り替えてください。

lessの文字コード対応

ターミナルで作業を行う場合、lessでテキストファイルなどを表示させる場合があります。この時、テキストファイルの文字コードによってはそもそも日本語が表示できず、文字化けすることがあります。

このような場合には、lessの代わりにlvを用いるのが簡便です。lvパッケージは標準ではインストールされていませんので、適宜インストールしてください。

$ sudo apt-get update
$ sudo apt-get install lv

過去のおさらい

これまで触れてきたレシピの中にも、ターミナルを操作する上で役に立つものがあります。いくつか並べてみましょう。

デスクトップ上での右クリックでターミナルを開けるようにする

第13回で触れた通りnautilus-open-terminalをインストールすることで行えます。

ターミナルをウィジェットにする

こちらは第15回で触れましたが、ターミナルをウィジェットとして登録することで、ショートカットキー一つで表示・非表示を切り替えるレシピです。

ターミナルを頻繁に利用する場合、キーだけで作業中のターミナルを呼び出せるようになりますので、非常におすすめです。

参考になるドキュメント

Ubuntuでターミナルに初めて触れる人向けの、help.ubuntu.comのドキュメント
URLhttps://help.ubuntu.com/community/UsingTheTerminal/
URLhttps://help.ubuntu.com/community/CommandlineHowto

おすすめ記事

記事・ニュース一覧