退出终端并执行命令。

退出终端并执行命令。

我想退出当前终端并执行命令。可以做吗?

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 $$")。

相关内容