サブシェルでbashを実行したいのですが、ユーザーがサブシェルを終了するときに、他のコマンド(ログをファイルに保存する場合など)を実行したいと思います。
このようなもの:
#!/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を実行するにはどうすればよいですか?
私が最初に考えたのは.bash_logoutでもありましたが、これはログインシェルでのみ機能します。ログインシェルと非ログインシェルの両方で機能する最も簡単な方法は、終了時にトラップを設定することです。それはこのように動作します:
トラップ "your_commands_go_here" EXIT
例えば、 $ bash $ trap "echo goodbye cruel world!" EXIT $ exit exit goodbye cruel world!
特別なトリックは必要ありません。これで十分です:
#!/bin/bash
env PS1='SubShell:' bash --rcfile /home/username/.bashrc
echo Subshell exited. Now doing something...
サブシェルはメインターミナルで実行されます。メインスクリプトは、追加のコマンドなしで終了するのを待ちます。
(シェルの上からPS1
を設定する方法がわかりません。サブシェルのBashの起動時に上書きされると思います。)
各ユーザーのホームディレクトリに.bash_logoutという名前のファイルがあります。その中に、必要なコマンドを挿入してみてください。
.bash_logoutがホームディレクトリにまだ存在していない可能性があります。私は過去にこれに遭遇しました。この場合は、vi/vimを使用して、ホームディレクトリに独自の.bash_logoutファイルを作成するだけで、うまくいくはずです。