81
bashシェルのプロンプトの長さを制限する

10.3 および 10.4 でターミナルを使用する場合、おそらく bash シェルを使用します。これは、以前 tcsh を使用していたアップグレード インストールを使用しているのでない限り、デフォルトです。

「シェル」とは何かご存じない方のためにご説明すると、シェルとは実際には、ターミナル経由でOS XのUnix側と通信する際に使用するインターフェースを提供するプログラムです。OS Xの初期バージョンでは、Appleはデフォルトのシェルをtcshに設定していましたが、OS X 10.3以降のリリースでbashに変更されました。

bash の機能の一つに、現在の作業ディレクトリを表示するプロンプト行があります。ファイル構造内を移動すると、プロンプト文字列は常に現在の作業ディレクトリを反映します。

gargantua5:~ robg$ cd Library/gargantua5:~/Library robg$ cd Widgets/gargantua5:~/Library/Widgets robg$ cd WindGuru.wdgt/gargantua5:~/Library/Widgets/WindGuru.wdgt robg$

これは理論上は素晴らしいのですが、実際にはそうでもない場合があります。例えば、システムフォルダの奥深くまでドリルダウンするとどうなるか考えてみてください。

gargantua5:/System/Library/CoreServices/Dock.app/Contents/Resources robg$

80文字のターミナルウィンドウを使用している場合、上記のプロンプト行は実際には画面の幅いっぱいに表示されてしまいます。そのため、画面がコマンド、パス表示、出力などでごちゃ混ぜになり、ターミナルでの作業が非常に困難になります。この問題には多くの解決策がありますが、ここでは私が気に入っている2つの解決策を紹介します。

どちらの解決策でも、ホームディレクトリにあるviユーザーファイルをエディタで編集する必要があります。ターミナルを起動し、ホームディレクトリにいることを確認するために、と入力してReturnキーを押します。次に と入力します。既存のファイルがある場合は、編集用に開きます。ない場合は、新しいファイルが開きます。そこから、お好みに応じて適切な解決策を実行してください。.bash_profilecdvi .bash_profile

解決策1: ターミナルのタイトルバーを使用する

プロンプトにパスを表示する代わりに、次のように bash でターミナルのウィンドウ タイトルにプロンプ​​トを表示することができます。

これを行うには、ファイルに次の 2 行を追加するだけです.bash_profile

エクスポート PROMPT_COMMAND='echo -n "^[]1;$PWD^G"'PS1='e[7m [u] :[e[0;m] '

ただし、上記のテキスト全体をそのままコピー&ペーストすることはできません。2行目は機能しますが、1行目には2つの特別な「引用符で囲まれた」コマンドが含まれています。そこで、入力方法を説明します。まず、 を押して挿入モードにiしますvi

次に、最初のキャレット( )までのすべてをコピーして貼り付けます(最初のキャレットは含みません^)。続く2文字 は^[、実際のEscapeキーを表します。 に入力するにはvi、Control-Vを押してからEscapeキーを押します。これで、コード化されたEscapeキー文字が入力されます。次に、最初のキャレット( )までのすべてをコピーして貼り付けます(最初のキャレットは含みません)。 を入力するには^G、同じ手順でControl-Vを押してからControl-Gを押します。最後に、閉じる二重引用符と一重引用符を入力します。ふう。

2行入力したら、Escキーを押してから、:w変更を保存して:qエディターを終了してください。新しいターミナルウィンドウを開くと、タイトルにパスが表示され、ユーザー名が表示された短いプロンプトが表示されます。

これら2つのコマンドで何が行われているのかは説明しません。最初のコマンドはウィンドウタイトルを設定し、2番目のコマンドはASCIIコードを使ってユーザー名の白黒バージョンをプロンプトとして作成します。Escキーを押してファイルを保存します。ウィンドウタイトルにパスを表示するこの非常にシンプルなプロンプトを好む人も多いですが、私はプロンプトに現在のディレクトリを短く表示させたいと考えています。まさに次の解決策で実現できます。

解決策2: 表示されるパスの長さを制限する

2つ目の解決策は、プロンプトのパスを特定の文字数に制限することです。システムをどれだけ深く掘り下げても、プロンプトには指定した文字数だけが表示されます。.bash_profile上記のようにファイルを開き、 を押してi挿入モードに入り、次のコードを貼り付けます。

function prompt_command { # $PWD の何文字をローカルに保持するか pwd_length=23 if [ $(echo -n $PWD | wc -c | tr -d " ") -gt $pwd_length ] then newPWD="$(echo -n $PWD | sed -e "s/.*(.{$pwd_length})/1/")" else newPWD="$(echo -n $PWD)" fi}PROMPT_COMMAND=prompt_commandexport PROMPT_COMMANDPS1='e[7m$newPWD [u]:[e[0;m] '

23プロンプトのパスに表示する文字数を表すを除いて、すべて表示されているとおりにしてください。入力が完了したら、Escキーを押して挿入モードを終了し、:wと と入力します:q

最初の解決策と同様に、ここでもパスを短縮する(つまり関数が行う)という巧妙なトリックが使われており、それをプロンプトに表示します。新しいターミナルウィンドウを開き、奥深くに埋もれたフォルダに移動すると、次のような画面が表示されるはずです。

リソース/English.lproj [robg]:

これは完全なパスほど便利ではありませんが、少なくとも次のコマンドを実行する前に自分がどこにいたかを思い出すには十分です。