

`bash`上で、エンターを押して、ラインが変わるさいに、何らかのコマンドを実行したいのですが、そのようなフックの方法があるのでしょうか。具体的には下のような感じです:

[code]

    $ cat foobar.txt
    # run anything command
    $ #Enter
    # run anything command
    $ 
    
[/code]

この `# run anything command` という部分で、何らかのコマンドが実行されるような感じをイメージしています。

# 追記

任意のコマンドの実行タイミングを記述するのを忘れていました。`cat
foobar.txt`というコマンドを入力したあとであるならば、`foobar.txt`の内容が表示されたあとに、任意のコマンドが実行されるような流れが望ましいです。


CC BY-SA 3.0
2015-01-15T08:26:28.617
4602
2015-01-15T14:20:16.650
2015-01-15T10:19:02.523
939
939
question
bash
ラインが変わるごとに任意のコマンドを呼び出したい


フックではなく、さらにいろいろ問題がありそうなスクリプトですが、以下を実行するとご要望を叶えることができそうです。  
ただし、bashの機能がほぼほぼ失われるので実用的ではないかと思いますが……。

[code]

    #!/bin/bash
    
    while read -p "[auto] $ " command ; do
        $command
        echo auto # write command to run automatically
    done
    
[/code]


CC BY-SA 3.0
2015-01-15T09:47:47.500
4605
2015-01-15T09:47:47.500
3160
4602
answer


trapコマンドで疑似シグナルDEBUGに処理を割り当てると、入力したコマンドの実行前に処理が実行されます。空エンターでは実行されませんが。

[code]

    $ trap 'echo Yo' DEBUG
    $ echo Hello
    Yo
    Hello
    
[/code]


CC BY-SA 3.0
2015-01-15T10:05:17.707
4606
2015-01-15T10:05:17.707
4010
4602
answer


`while read` の別解として...  
実行するコマンドが1行で書ける様な物ならば、xargs が使えると思います。

[code]

    cat foo.log | xargs -i sh -c "echo '{}' && my-command"
    
[/code]

`{}` の部分が行に置き換わります。


CC BY-SA 3.0
2015-01-15T10:41:59.653
4609
2015-01-15T10:41:59.653
440
4602
answer


[`PS1` シェル変数](http://linuxjm.sourceforge.jp/html/GNU_bash/man1/bash.1.html) ！！
フックではないけれど。

タイミングは、「プロンプトが毎回表示される直前」ですね。

[code]

    PS1="$(echo '(ﾉ￣ω￣)ﾉ\n')$PS1"
    
[/code]

_※ 環境によって無駄な改行が入るので`\n` を取り除くようにしてください。_

* * *

### 追記:

前回実行したコマンドを盛り込みたければ

[code]

    PS1="$(echo '(ﾉ￣ω￣)ﾉ ohh... $(fc -ln -2 | tail -n 1)\n')$PS1"
    
[/code]

_※ 実用では、自前の function に委譲して、チェックやトリムをすることになると思います_


CC BY-SA 3.0
2015-01-15T10:44:51.990
4610
2015-01-15T13:25:26.627
2015-01-15T13:25:26.627
4978
4978
4602
answer


`PROMPT_COMMAND` が使えないでしょうか？ プロンプト(`PS1`)が表示されるたびに実行されます。

[code]

    $ function hoge(){ date; }
    $ PROMPT_COMMAND=hoge
    2015年  1月 15日 木曜日 20:39:32 JST
    $ cat foobar.txt
    this is foobar.txt
    2015年  1月 15日 木曜日 20:39:35 JST
    $ 
    2015年  1月 15日 木曜日 20:39:40 JST
    $ 
    
[/code]


CC BY-SA 3.0
2015-01-15T11:41:22.640
4613
2015-01-15T14:20:16.650
2015-01-15T14:20:16.650
2494
2494
4602
answer