我想退出当前终端并执行命令。可以做吗?
PS:: 假设我已经做了一个循环while true; do bash;done
答案1
您可以使用适当的陷阱在子 shell 中执行它。例如,如果您想echo -e '\nCommand done
在 a 的末尾执行while true; do true; done
,您可以使用以下命令:
mario@mario-K53SV:~$ (trap 'echo -e "\nCommand done"' EXIT; while true; do true; done)
该陷阱会注册您在子 shell 的 EXIT 事件上定义的命令。需要括号来创建子 shell。请注意,如果您想概括这一点,并将命令放入变量中(例如MY_COMMAND='while true; do true; done'
),您将需要eval
正确执行它们。这个示例输出准确地显示了它的用处(没有 eval,这将不起作用):
mario@mario-K53SV:~$ YOUR_COMMAND="while true; do true; done"
mario@mario-K53SV:~$ EXECUTE_ON_EXIT="echo -e '\nCommand done'"
mario@mario-K53SV:~$ (trap 'eval ${EXECUTE_ON_EXIT}' EXIT; eval ${YOUR_COMMAND})
^C
Command done
mario@mario-K53SV:~$
如果您愿意,这也可以用于自动关闭您的终端同样,在 EXIT 处理程序命令的末尾:只需包含kill -s SIGHUP $$
在处理程序的末尾(例如EXECUTE_ON_EXIT="echo -e '\nCommand done'; kill -s SIGHUP $$"
)。