如何将所有bash进程作为后台运行?

如何将所有bash进程作为后台运行?,bash,shell,Bash,Shell,我认为在前台运行进程没有任何用处。所以我想在后台运行所有进程。可能吗? 另外,请告诉我这样做是否有任何问题。您是指bash脚本吗?在末尾添加&。例如: $。/myscript&你是说bash脚本吗?在末尾添加&。例如: $。/myscript&你是说bash脚本吗?在末尾添加&。例如: $。/myscript&你是说bash脚本吗?在末尾添加&。例如: $./myscript&您可以根据以下问题调整代码: 基本上,这使用DEBUGtrap在命令行上键入任何内容之前运行命令。那么这个, preex

我认为在前台运行进程没有任何用处。所以我想在后台运行所有进程。可能吗?
另外,请告诉我这样做是否有任何问题。

您是指bash脚本吗?在末尾添加
&
。例如:


$。/myscript&

你是说bash脚本吗?在末尾添加
&
。例如:


$。/myscript&

你是说bash脚本吗?在末尾添加
&
。例如:


$。/myscript&

你是说bash脚本吗?在末尾添加
&
。例如:


$./myscript&

您可以根据以下问题调整代码:

基本上,这使用
DEBUG
trap在命令行上键入任何内容之前运行命令。那么这个,

preexec () { :; }
preexec_invoke_exec () {
    [ -n "$COMP_LINE" ] && return  # do nothing if completing
    [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return # don't cause a preexec for $PROMPT_COMMAND
    local this_command=$(HISTTIMEFORMAT= history 1);
    preexec "$this_command" &
}
trap 'preexec_invoke_exec' DEBUG
运行该命令,但随后使用
&
,将进程后台化

请注意,这将在您的终端上产生其他相当奇怪的效果,任何应该在前台运行的东西(命令行浏览器、邮件阅读器、交互式命令、任何需要输入的东西等)都会有问题


您只需键入
bash
,即可尝试执行另一个shell。粘贴上面的代码,如果事情开始变得奇怪,只需退出shell,事情就会重置。

您可以根据这个问题调整代码:

基本上,这使用
DEBUG
trap在命令行上键入任何内容之前运行命令。那么这个,

preexec () { :; }
preexec_invoke_exec () {
    [ -n "$COMP_LINE" ] && return  # do nothing if completing
    [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return # don't cause a preexec for $PROMPT_COMMAND
    local this_command=$(HISTTIMEFORMAT= history 1);
    preexec "$this_command" &
}
trap 'preexec_invoke_exec' DEBUG
运行该命令,但随后使用
&
,将进程后台化

请注意,这将在您的终端上产生其他相当奇怪的效果,任何应该在前台运行的东西(命令行浏览器、邮件阅读器、交互式命令、任何需要输入的东西等)都会有问题


您只需键入
bash
,即可尝试执行另一个shell。粘贴上面的代码,如果事情开始变得奇怪,只需退出shell,事情就会重置。

您可以根据这个问题调整代码:

基本上,这使用
DEBUG
trap在命令行上键入任何内容之前运行命令。那么这个,

preexec () { :; }
preexec_invoke_exec () {
    [ -n "$COMP_LINE" ] && return  # do nothing if completing
    [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return # don't cause a preexec for $PROMPT_COMMAND
    local this_command=$(HISTTIMEFORMAT= history 1);
    preexec "$this_command" &
}
trap 'preexec_invoke_exec' DEBUG
运行该命令,但随后使用
&
,将进程后台化

请注意,这将在您的终端上产生其他相当奇怪的效果,任何应该在前台运行的东西(命令行浏览器、邮件阅读器、交互式命令、任何需要输入的东西等)都会有问题


您只需键入
bash
,即可尝试执行另一个shell。粘贴上面的代码,如果事情开始变得奇怪,只需退出shell,事情就会重置。

您可以根据这个问题调整代码:

基本上,这使用
DEBUG
trap在命令行上键入任何内容之前运行命令。那么这个,

preexec () { :; }
preexec_invoke_exec () {
    [ -n "$COMP_LINE" ] && return  # do nothing if completing
    [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return # don't cause a preexec for $PROMPT_COMMAND
    local this_command=$(HISTTIMEFORMAT= history 1);
    preexec "$this_command" &
}
trap 'preexec_invoke_exec' DEBUG
运行该命令,但随后使用
&
,将进程后台化

请注意,这将在您的终端上产生其他相当奇怪的效果,任何应该在前台运行的东西(命令行浏览器、邮件阅读器、交互式命令、任何需要输入的东西等)都会有问题


您只需键入
bash
,即可尝试执行另一个shell。粘贴上面的代码,如果事情开始变得奇怪,只需退出shell,事情就会重置。

虽然可以做一些@pgl建议的聪明的事情,但这不是一个好主意。在后台运行的进程不会以有用的方式向您显示其输出。因此,如果所有进程都自动发送到后台,您的终端将充斥着各种标准输出和标准错误消息,但您将无法知道这些消息来自何处,您的终端将几乎毫无用处,并随之产生混乱


因此,是的,有一个很好的理由让流程保持在前台:查看它们在做什么,并能够轻松地控制它们。举一个更具体的例子,任何需要与之交互的程序都不能在后台运行。这包括要求
继续[Y/N]?
或要求输入密码的
sudo
等内容。如果你只是盲目地让所有的东西都在后台运行,那么这些命令只会静静地挂起。

虽然可以做一些@pgl建议的聪明的事情,但这不是一个好主意。在后台运行的进程不会以有用的方式向您显示其输出。因此,如果所有进程都自动发送到后台,您的终端将充斥着各种标准输出和标准错误消息,但您将无法知道这些消息来自何处,您的终端将几乎毫无用处,并随之产生混乱


因此,是的,有一个很好的理由让流程保持在前台:查看它们在做什么,并能够轻松地控制它们。举一个更具体的例子,任何需要与之交互的程序都不能在后台运行。这包括要求
继续[Y/N]?
或要求输入密码的
sudo
等内容。如果你只是盲目地让所有的东西都在后台运行,那么这些命令只会静静地挂起。

虽然可以做一些@pgl建议的聪明的事情,但这不是一个好主意。在后台运行的进程不会以有用的方式向您显示其输出。因此,如果所有进程都自动发送到后台,您的终端将充斥着各种标准输出和标准错误消息,但您将无法知道这些消息来自何处,您的终端将几乎毫无用处,并随之产生混乱

因此,是的,有一个很好的理由将流程保留在fo中