3 つのコマンドラインでのパスの編集方法
PATH
環境変数は、Linux でコマンドラインを使用する上で最も重要な部分の 1 つです。 最近のシステムでは、それはしばしばコロンで区切られた非常に長いディレクトリの文字列となります。 パスの項目を変更したい場合、多くの異なるディレクトリ名をタイプして編集し、すべてを正しく表示させなければならないのは、迷惑なことです。 幸いなことに、それを簡単にする方法がいくつかあります。 同じことがあらゆる環境変数に当てはまり、これから紹介するツールのほとんどは、それらのどれに対しても機能します。
概要
Linux におけるほとんどのことと同様に、目標を得るための方法はたくさんあります。 3つの方法と言ったって、おそらく無限にあるわけで、ここでは3つに含めない方法を紹介します。 拡張を使う。
ただし、これは変数の先頭か末尾に何かを追加したい場合にのみ有効です。 たとえば、PATH
に~/foo
を追加したいとします:
# add to the end:
PATH="$PATH:~/foo"
# add to the start:
PATH="~/foo:$PATH"
これは簡単ですが、変数の中の何かを削除したり変更したりしたい場合には役に立ちません。 3537>
Method 1: The Hardest Way
GUIターミナル内にいると仮定すると、おそらくテキストをカットアンドペーストする方法があるはずです。 3537>
echo $PATH
と書くのは簡単に思えるかもしれませんが、そのテキストを拾って、新しいコマンドラインに PATH="
と入力して残りのテキストを貼り付けることができます。 変更を加えて、引用符を閉じて、Enter
を押します。 既存のテキストを編集する必要がある場合、これではあまり改善されないと思うかもしれませんが、bash で CONTROL+X, CONTROL+E
を押すと、コマンドを編集するための素晴らしいエディタウィンドウが表示されることがわかります。 これはどのようなコマンドでも動作し、長いコマンドラインをヒストリーから取り出して修正する必要がある場合に非常に便利です。 EDITOR
環境変数で指定します。 デフォルトで表示されるエディタが気に入らない場合は、起動ファイル (例: .bashrc) を変更して変数を設定します:
EDITOR=nano
これは良いことですが、もっと良いことができます。 結局、この方法では、変数を表示し、手動で入力し、コピー アンド ペーストを行う必要があります。
Method 2: envedit/pathedit
GitHub では、envedit および pathedit のスクリプトを見つけることができます。 これらのスクリプトは、システム上のどこか見つけられる場所 (たとえば /usr/local/bin) に置くことができる単純なものです。
問題は、スクリプトが環境に加えた変更は、そのスクリプトが終了した後も保持されないことです (下記の「環境とは何か」セクションを参照してください)。 その結果、これらのファイルを動作させるためにソースを作成する必要があります。 pathedit スクリプトは PATH
を好きなエディタで編集し、envedit
は変数名を必要とし、同じ作業をします:
# use . or source for these scripts
. pathedit
# or
source pathedit
. envedit PULSE # edit $PULSE
常にソースを覚えていなければならないのはちょっと面倒なので、スクリプトには特別な機能があります。 .bashrc で一度だけソースして、引数 alias
を渡すと、スクリプトは自分自身のエイリアスを設定し、patchedit や envedit とタイプするだけでソースが実行されるようになります:
. pathedit alias # now just typing pathedit will work
通常、スクリプトは $EDITOR
で使用するエディタを判断しています。 この目的のためだけに特別なエディタを使いたい場合は、$PATHEDIT_EDITOR
または $ENVEDIT_EDITOR
を設定すると、通常の設定が上書きされます。 これが設定されていない場合、スクリプトはデフォルトで vi になる前に $EDITOR
と $VISUAL
を探します。
方法 3: envedit2/pathedit2
3番目の方法も同じ GitHub ページに記載されています。 操作方法は方法2と同じだけです。 つまり、やはりファイルをどこかに置いて、alias
の引数で呼び出してセットアップします。 ただし、これらのスクリプトはテキストエディタを使用しません。 代わりに、編集する正しい文字列でbashコマンドラインバッファをロードします。
これらのいずれかを実行すると、envedit または pathedit のエイリアスがセットアップされるので、セットアップするとき以外は 2 を使用してこれらを使用することはないことに注意してください。 それは、最後に設定した方が “勝ち” ということでもあります。
これらのスクリプトのいずれかを実行すると、プロンプトの前に奇妙なエスケープ文字が表示されることがあります。 これは、バッファを満たすためのトリガーとなるステータス レポートです。 3537>
There’s Your Three
これらのスクリプトだけを使用したい場合は、これで完了です。 これらのスクリプトが有用であることをご理解いただければ幸いです。 このスクリプトがどのように、そしてなぜ動作するのかに興味がないのであれば、ここでやめても構わない。
環境とは
環境は、すべてのプログラムに渡される小さなデータベースと考えることができます。 たとえば、おそらく EDITOR
という環境変数があり、通常 vi、emacs、nano などに設定されていると思います。
プログラムAが他のプログラム (B) を起動すると、子プログラムは環境のコピーを取得しますが、プログラムAはBを起動する前に環境に変更を加えることができます。 これは、シェル スクリプトで実際に問題となることです。 例えば、PATH
の末尾に~/foo
を追加するスクリプトを書きたいとします。 3537>
#!/bin/bash
# Bad example
PATH="$PATH:~/foo"
問題は、このスクリプトがbashの独自のコピーで実行されることです。 スクリプトはきちんと変数 PATH
を変更してから終了し、新しいコピー PATH
は消えてしまいます。 もちろん、この変更はスクリプトの他の部分にも適用される。 これを動作させるには、スクリプトを source
する必要がある (そうすれば、#! 行は必要なくなるが、残しておいても問題はない)。 上記のスクリプトの名前が foopath
だったとする。 3537>
source ./foopath
# or the same thing:
. ./foopath
このように、シェルにソースすることによって、シェルの現在の環境を変更することができるスクリプトがあります。 これらのツールが有用であることを確認し、GitHub でバグを報告してください。
Bonus Round
先ほど、手動でカット アンド ペーストするのが最も難しい方法かもしれないと言いました。 しかし、もうひとつ方法があります。 etc/inputrc または ~/.inputrc が正しく設定されていれば、次のように入力できます (ただし Enter キーを押さないでください):
PATH=$PATH
それから Alt+Control+E を押すと、シェルが $PATH 変数を展開してくれます。 しかし、
PATH="$PATH"
とすると、展開すると引用符が消えてしまうことがわかるでしょう。
PATH=\"$PATH\"
そしてAlt+Control+Eを押してください。 bind -P
の出力で、関数 shell-expand-line
が何かに束縛されているかどうかを知ることができます。