コマンドラインが実行されるたびにbashスクリプトを実行する


9

私は新しいUbuntu / Linuxユーザーです。上記のタイトルとして質問したいと思います。

たとえば、bashファイルがあります./script。コマンドラインを入力すると自動的に実行されるようにしたいと考えています。私は、コマンドラインを実行するとpwd、次に./script実行されます。次のコマンドラインls -laを入力する./scriptと、再度実行されます。


4
入力したコマンドごとにどのようなアクションを実行するつもりですか?そしてそれは対話的にタイプされた人のためだけのものであるべきですか?または、スクリプト内の任意のコマンドについてですか?sshを介して入力されたコマンドはどうですか?etc.これはXYProblemである
Olivier Dulac

回答:


13

PROMPT_COMMAND変数を設定する必要があります。からman bash

PROMPT_COMMAND
              If set, the value is executed as a command prior to
              issuing each primary prompt.

たとえば/tmp/PC、コマンドが実行されるたびに現在の日付が書き込まれます。

 $ PROMPT_COMMAND="date > /tmp/PC"

1
うん、私はそれを得た..かなりクールな解決策。(賛成)
Ender Phan

1
これは間違っています。コマンドecho $(date)は宣言時に実行されるため、常に同時に表示(保存)されます。
heemayl 2016年

@heemayl:もちろんそうです、私は修正しました
Arkadiusz Drabczyk

@lộcphanこれらの回答のいずれかで問題が解決した場合は、少し時間を取って、左側のチェックマークをクリックして同意してください。これにより、質問に回答済みのマークが付けられ、Stack Exchangeサイトで感謝の意が表明されます。
terdon 2016年

@heemayl:なぜ?...
Arkadiusz Drabczyk 2016年

11

あなたはPROMPT_COMMAND環境変数を探しています、この変数の値は、ターミナルで与えられた各コマンドが実行された後、次のプロンプトを表示する直前にコマンドとして実行されます。

たとえば、次のように設定します。

export PROMPT_COMMAND='/path/to/script'

スクリプトを/path/to/script最初に実行可能にします。

これで、スクリプトは各コマンドの後に実行されます。

変数をエクスポートしたくない場合、つまり環境変数ではなくシェル変数にする場合は、次のように削除しますexport

PROMPT_COMMAND='/path/to/script'

からman bash

PROMPT_COMMAND 
If set, the value is executed as a command prior to issuing each primary prompt.

私はそれを手に入れました、あなたの助けをどうもありがとうございました:)(btw賛成)
Ender Phan

なぜ使用していexportますか?
Arkadiusz Drabczyk 2016年

@ArkadiuszDrabczyk exportは、変数PROMPT_COMMANDを環境変数にします。つまり、変数は、現在のシェルのすべての子プロセス(サブシェルなど)で使用できます。現在のシェルセッションのみ(シェル変数)に制限する場合は、を削除しexportます。
heemayl

5
@heemayl:IMO exportはここでは良い習慣ではありません- PROMPT_COMMAND対話型のシェルスタートアップファイルでのみ設定し、環境では表示しないでください
Arkadiusz Drabczyk
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.