有没有办法在 bash 中转义进程而不退出它?

有没有办法在 bash 中转义进程而不退出它?

例如,我打字sudo apt-get update,然后几分钟后就会出现一长串内容。

如果我想摆脱这种令人厌烦的更新并再次控制 bash 命令行(而不退出原始命令),

是否有热键或类似的东西可以做到这一点?

答案1

您可以apt-get暂时停止Ctrl-Z然后重新启动工作在背景中bg命令

$ apt-get foo bar ...
^Z
bash: suspended apt-get
$ bg
bash: continued apt-get
$

apt-get但是,当您这样做时,您将继续从终端上获取输出。它不是在您已经启动命令之后可以停止它(除了使用调试器的肮脏黑客之外)。不过,您可以在此处运行其他命令。当作业停止时,它仍然存在,但没有运行,因此它不会取得任何进展,但您也不会看到任何输出。

您可能会发现有用的是screen或者tmux命令。它们允许您在同一物理终端内使用不同终端运行多个会话。如果您使用的是 X,则可以运行其他终端模拟器,或者在当前的选项卡中创建一个新选项卡。无论采用哪种方式,您都可以apt-get update在一个 shell 中运行,然后切换到另一个 shell 继续工作。

答案2

对于这个特定的命令,您通常可以假设它在大多数情况下都能正常工作而不会出现错误。在这种情况下,您最好像这样运行它:

  sudo apt-get update > ~/.aptget.update.log &

您还可以使用括号隐藏所有输出:

  (sudo apt-get update > ~/.aptget.update.log &)

可以使用此行作为别名,以便您可以方便地使用:

  alias apt-update="(sudo apt-get update > ~/.aptget.update.log &)"

这使您可以仅使用“apt-update”运行命令。将其放入您的~/.bashrc文件中,以便每次登录时自动运行它。

然后,您还可以添加自定义消息来提醒您它正在做什么:

  alias apt-update="echo \"Running apt-get update in the background. Wait a few moments for it to finish.\" || (sudo apt-get update > ~/.aptget.update.log &)"

相关内容