2016-05-27 17 views
1

これまでは、.bashrcファイルで定義されたエイリアスと関数しか使用していませんでしたが、今度はすべてのコマンドの前後に実行する関数を設定する方法を知る必要があります。どうすれば達成できますか?すべてのユーザー入力で実行するアクションを設定する

+0

コマンドの前のPS1、後のPROMPT_COMMAND – 123

答えて

2

環境変数PROMPT_COMMANDあり、値は各一次プロンプト($PS1)の印刷前に実行 にコマンドとして解釈され、the manual

PROMPT_COMMAND

セットかどうかを確認。

prompt_command() { 
    # If username has underscore, shorten to 'a_b'; else just use first letter 
    un="${USER:0:1}" 
    if [[ $USER == *?_?* ]]; then 
     local suff="${USER##*_}" 
     un+=_"${suff:0:1}" 
    fi 
} 
PROMPT_COMMAND=prompt_command 

私は修正するためにこれを使用します。あなたはそれが関数を呼び出すことができ、より複雑なもののため

PROMPT_COMMAND='echo "Something"' 

:些細なケースでは

は、エイリアスのようにそれを設定します私のプロンプトのユーザー名は、私の.bashrcのようなものがあります。

export PS1="[email protected]\h \$" 

典型的な[email protected] $プロンプトが表示されますが、ユーザ名はPROMPT_COMMAND機能で指定されているように動的に短縮されます。

0

同じことをするのはPS4です。仮定すると、あなたは、あなたにPS4を設定することができ、各コマンドの前にdateコマンドを実行したい:

PS4='$(date)\n' 

それからちょうど各コマンドの前に日付を印刷を開始するために追跡を可能にする:

set -x 

が次にあなたは日付が表示されて見ることができます各コマンドの前に実行されます。

$> set -x 

$> tty 
Fri May 27 09:57:42 EDT 2016 
tty 
/dev/ttys004 

$> uname 
Fri May 27 09:57:48 EDT 2016 
uname 
Darwin 

あなたはこれを無効にしたい場合は、単に使用してトレースをオフにします。

set -x 
関連する問題