有时我会通过 ssh 进入一个盒子,然后运行一些脚本来更改系统。我想在会话结束时显式(例如,通过exit
注销 shell)或隐式(例如,因为我的 ssh 会话超时)撤消此更改。
我可以设置一些东西来完成这个任务吗?
作为一个稻草人的例子,假设我创建了一个文件/etc/foo
,同时我想注册一个清理脚本,该脚本rm /etc/foo
在 ssh 会话结束时的某个时刻执行操作。
答案1
两种方式:
如果你想做一次性的事情,你可以设置一个EXIT
陷阱:
trap 'rm /etc/foo' EXIT
当当前 shell 退出时,这将运行给定的代码。可以在交互式提示符下设置陷阱,或者$HOME/.bash_profile
如果您想让它每次都发生(请注意,设置陷阱再次将移除之前设置的陷阱)。您可以消除执行之前的陷阱trap - EXIT
。
另一种方法是如果你想总是当交互式登录 shell 退出时运行一组特定的命令,您可以将这些命令放在$HOME/.bash_logout
.
当交互式登录 shell 退出或非交互式登录 shell 执行时,将执行此文件exit
。