特定のディレクトリで終了する場合は、ログアウトスクリプトのコードを実行しますか?

特定のディレクトリで終了する場合は、ログアウトスクリプトのコードを実行しますか?

私が貢献している複数のライブラリをテストするために、さまざまなコンピュータにアカウントを持っています。一部のマシンは他の人(GCCコンパイルファームなど)の所有者なので、きれいに保ちたいと思っています。

以下.bash_logoutを行うスクリプトを設定したいmake cleanexit もし私は特定のディレクトリにいます。ディレクトリでは、複数のSSHセッションを終了する必要があります。 1つのセッションでビルド/テストする場合は、アーティファクトをクリーンアップするために別々のセッションログアウトをしたくありません。つまり、実行がexitキャンセルされ$HOME/libfooexit決して$HOME

基本は理解していますが、それがどれほど強力かはわかりません。

# $HOME/.bash_logout

if [ "$PWD" = "$HOME/libfoo" ]; then
    make clean 1>/dev/null 2>&1
fi

$PWDログアウト時の使用に問題はありませんか?私が逃した他の質問がありますか?

答え1

ログアウト時にのみスクリプトを実行しますか?
メンズバッシュから:

ログインシェルが終了すると、bashは〜/ .bash_logoutファイル(存在する場合)からコマンドを読み取り、実行します。

bashログインシェルを終了したときにのみ適用されます。


シェルが閉じるたびにスクリプトを実行するには、トラップを使用します(man bashを参照)。

trap /u1/myuser/on_exit_script.sh EXIT

これを.bashrcまたはあなたに適した他のファイルに追加してください。


さらに、スクリプトはシャットダウン時に実行されるため、$ PWDはシャットダウン時にアクティブになるスクリプトになります。これはシェルが起動したときと同じかもしれません。終了時に使用された $PWD で何かを行う必要がある場合はそうです。このテストは次のとおりです。

if [ "$PWD" = "$HOME/libfoo" ]; then

動作する必要があります。

答え2

私は多くのシェルスクリプトが移植可能でシェルに拘束されないのが好きなので、bash固有の.bash_logoutメソッドを使用する代わりにEXITをキャッチすることを好みます。真のスタンドアロンソリューションの場合は、.bash_logoutを変更または作成する必要がないか、終了時に実行される別のスクリプトを使用することをお勧めします。もちろん、さらに悪いことは、「exit」コマンド自体がシステムで実行する操作を変更または上書きすることです。このソリューションは他の誰にも影響を与えてはいけません!

したがって、外部システムへの影響を最小限に抑えるために、私が好むアプローチは、システム操作を開始するたびにカスタムログインプロファイルを配置し、同じプロファイルがそれ自体でクリーンアップされ、ヘルパースクリプトまたは構成ファイルが生成されるすべてがクリーンアップされるようにすることです。です。次に、設定ファイルをインポートし(kshでも動作する「.」を使用)、すべてのエイリアスなどを設定します。しかし、作業が完了した後も維持されたくありません。

そこで、上記のクリーンアップを実行するために、スクリプト自体に "bye" シェル関数を作成し、意図的にまたは単に接続を切断する方法でログアウト時に自動クリーンアップのために登録しました。

trap bye EXIT

これは私の仕事に醜い痕跡を残しません。どの特定のクリーンアップを実行する必要があるかは、ユーザーによって異なります。ディレクトリごとの"make clean"は多くの可能性の1つです。何らかの方法でログアウトすると、プロファイルのすべての痕跡(クリーンな機能も含む)が消えます。

さらに一歩進むことができます。さまざまなタイプのシステムでさまざまなタイプのクリーンアップが必要な場合もあります。スイッチを「bye」シェル関数にするか、別の「bye1」、「bye2」を作成し、いくつかのテスト(特定のファイルが存在するかどうか)に基づいて必要なスイッチを登録できます。これは、同じプロファイルを維持したい長期システムから自分のカスタムプロファイルが削除されるのを防ぐ方法です。

答え3

bash_logoutでこれを行う方法がわかりません。 exitという小さなスクリプトを書いて/usr/local/bin/に入れて、次のように質問に入れたコードタイプを使うことができます。コンソールは、特定のディレクトリにある場合は目的の操作を実行します。

関連情報