2016-11-09 3 views
0

PROMPT_COMMANDが1つだけあり、プロンプトを表示する直前に実行されます。典型的な方法を実行するためにコマンドを追加するには、次のとおりです。PROMPT_COMMANDでユニークなエントリを維持する

PROMPT_COMMAND="my_command; $PROMPT_COMMAND" 

問題は、この行でそのが既に追加されている場合でも、my_commandを追加します。私はそれを更新した後に私の~/.bashrcをソースしたいと思っています。

PROMPT_COMMAND=$(echo "$PROMPT_COMMAND" | sed 's/^ *\(.*[^ ]\) *$/\1/' | sed 's/ *; */\n/g' | sed '/^$/d' | sort -u | tr '\n' ';') 

しかし、いくつかのコマンドは;内部の文字列とサブシェルのコマンドが含まれ、上記を破るなど:.bashrc上記では、PROMPT_COMMANDmycommand; mycommand; mycommand; mycommand; ...

私は;に基づいて分割し、再結合することでしたひとつのアイデアに展開します引用符、大括弧、エスケープ文字は無視されます。どうすればきれいに複数のPROMPT_COMMANDを維持できますか?

答えて

0

この機能は、まだ存在しない場合にのみPROMPT_COMMANDにsomethigを追加します。

function prompt_command_push() { 
    if [[ "$PROMPT_COMMAND" != *"[email protected]"* ]]; then 
     if [[ -n "$PROMPT_COMMAND" ]]; then 
      export PROMPT_COMMAND="$PROMPT_COMMAND;[email protected]" 
     else 
      export PROMPT_COMMAND="[email protected]" 
     fi 
    fi 
} 

prompt_command_push printf hello 
prompt_command_push echo '\ world' 

"$ @"を文字列として使用し、エスケープシーケンスを2回解析するように注意する必要があります。

この関数は、最後に追加されたコマンドが最後に実行されるように、コマンドの前に追加するのではなく、コマンドを追加します。私はこの問題にアプローチ

0

方法はPROMPT_COMMAND変数のコピーを保持する新しい変数を作成することです。

export ORIGINAL_PROMPT_COMMAND="${PROMPT_COMMAND}" 
export PROMPT_COMMAND="my_command; ${ORIGINAL_PROMPT_COMMAND}" 

これはあなたのmy_commandは1回だけ実行されるように、元のPROMPT_COMMANDが尊重される原因になります:

は、あなたの~/.bashrcファイルでこれを入れてください。

関連する問題