Bash:プロンプトを変更し直すまでコマンドプロンプトを永久に変更する方法は?

Bash:プロンプトを変更し直すまでコマンドプロンプトを永久に変更する方法は?

2 つのコマンドが必要です。最初のコマンドはプロンプトを$␣またはに減らします#␣。これはlong_prompt、プロンプトをデフォルトバージョンにリセットするコマンドを実行するまで、現在のシェルで永続的でなければなりません。

short_promptコマンドスクリプトは次のとおりです。

if [ $(id -u) = 0 ]; then
   PS1='\[\033[01;34m\]#\[\033[00m\] '
else
   PS1='\[\033[01;34m\]\$\[\033[00m\] '
fi

(ご覧のように、管理者シェルとユーザーシェルの異なるプロンプトを尊重します。)
このスクリプトを次のように取得したとき:

$ . short_prompt

すべてが期待どおりに機能しますが、これを行うには、次のようにディレクトリにあるか、フルパスshort_prompt名を指定する必要があります。

$ . /data/system/bin/short_prompt

/usr/local/binこのコマンドをどこからでもアクセスできるようにする方法(たとえば、パスディレクトリの1つへのソフトリンクを作成して)を理解し、次のように入力する方法がわからないようです。

$ short_prompt

または

$ long_prompt

export私は前に2行を追加しようとしましたが、PS1='...'そのうちの1つも機能しませんでした。

答え1

実行中のシェルのPS1に影響を与える唯一の方法は、コードを取得することです。

この問題を解決する方法はいくつかあります。

  1. /home/user/bin にスクリプトを挿入します。

    実行可能なスクリプト名を指定しshort_promptます/home/user/bin

    #!/bin/bash
    . /data/system/bin/short_prompt
    

    これにより実行が簡単になります。

    $ショートプロンプト

  2. エイリアスを指定してください

    $ alias short_prompt='. /data/system/bin/short_prompt'
    

    実行は次のとおりです

    $ short_prompt
    
  3. 使用~/.bashrc:

    コードを「~/.bashrc」に関数として配置します。

    short_prompt(){
        PS1='\[\033[01;34m\]\$\[\033[00m\] '
    }
    

    呼び出し方法は次のとおりです。

     $ short_prompt
    

答え2

スクリプトをディレクトリに配置すると、PATHBashはsourceそれを使用してソースのスクリプトを見つけます。これは変わることができますshopt sourcepathしかし、デフォルトではオンになっています。

別のオプションは、スクリプトがあるパスからスクリプトを取得するエイリアスまたは関数を作成するか、プロンプト割り当て全体を関数に入れることです。また、スクリプトを明示的に使用.したり呼び出す必要がないという利点もあります。source

ちなみに、ルートの場合はルート\$に拡張されるため、#ルートに別々のパスを設定する必要はありません。

割り当てると、export現在のシェルから開始できる他のすべてのシェルに環境変数が表示されます。PS1非対話型シェルがこれを消去するのに問題がありますが、一般的に.bashrc

関連情報