web-dev-qa-db-ja.com

独自の.bash_logoutファイルを使用して(スクリプトで)bashを実行する方法は?

サブシェルでbashを実行したいのですが、ユーザーがサブシェルを終了するときに、他のコマンド(ログをファイルに保存する場合など)を実行したいと思います。

このようなもの:

run.sh:

#!/bin/bash 

function save_information_to_file()
{
    echo "${date} ${time} new bash subshell ended !"
}
# Some commands etc.

env PS1='SubShell:' bash --rcfile /home/username/.bashrc

if [ user_logout_from_subshell ]
then 
     save_information_to_file()
fi;

実行:

user: ./run.sh
2016-08-12 14:55:13 new bash subshell started...
SubShell: echo "wow..."
wow... 
SubShell: pwd
/home/username
SubShell: cat user.log
2016-08-11 17:54:32 bash started
2016-08-11 17:56:14 bash ended
2016-08-11 18:23:18 bash started
2016-08-11 18:39:30 bash ended
SubShell: exit
exit
2016-08-12 14:59:41 new bash subshell ended !
user:

終了時に実行する必要があるファイルへのパスを使用してbashを実行するにはどうすればよいですか?

4
TMSeth

私が最初に考えたのは.bash_logoutでもありましたが、これはログインシェルでのみ機能します。ログインシェルと非ログインシェルの両方で機能する最も簡単な方法は、終了時にトラップを設定することです。それはこのように動作します:

トラップ "your_commands_go_here" EXIT

例えば、 $ bash $ trap "echo goodbye cruel world!" EXIT $ exit exit goodbye cruel world!

3
stangdon

特別なトリックは必要ありません。これで十分です:

#!/bin/bash 

env PS1='SubShell:' bash --rcfile /home/username/.bashrc

echo Subshell exited. Now doing something...

サブシェルはメインターミナルで実行されます。メインスクリプトは、追加のコマンドなしで終了するのを待ちます。

(シェルの上からPS1を設定する方法がわかりません。サブシェルのBashの起動時に上書きされると思います。)

4
user147505

各ユーザーのホームディレクトリに.bash_logoutという名前のファイルがあります。その中に、必要なコマンドを挿入してみてください。

3
Fabio Becamp

.bash_logoutがホームディレクトリにまだ存在していない可能性があります。私は過去にこれに遭遇しました。この場合は、vi/vimを使用して、ホームディレクトリに独自の.bash_logoutファイルを作成するだけで、うまくいくはずです。

0
Angus