Ubuntu Weekly Recipe

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

この記事を読むのに必要な時間:およそ 3 分

/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

著者プロフィール

吉田史(よしだふみひと)

Ubuntu Japanese Team Member株式会社創夢所属。システム管理を中心にWindows/PC Unixを併用している。Ubuntu Japanese Teamではパッケージサーバの管理や翻訳などの作業を担当。

コメント

  • ご指摘の件に関して

    著者に確認しましたところ,"間違いではないのでもう一度読んで頂ければ"という返答とともに,本文中の一部の"dash"を"dash (Debian Almquist Shell)"に修正させていただきました。

    Commented : #2  gihyo.jp編集部 (2008/05/14, 20:13)

    Last Edit: 2008/05/14, 20:33:05 by プレビュー  
  • 誤字

    ところどころ bash が 'dash' となっていますよ。

    Commented : #1  rskkdw6580 (2008/05/14, 16:42)

コメントの記入