如何使用单个命令启动多个进程?

如何使用单个命令启动多个进程?

我用pianobar播放器。但在启动它之前,我需要运行torpolipo。两者都是连续的(一直运行直到中断)。基本上我正在寻找的是一个单一的命令,它将生成torpolipo处理(不需要它们的输出),然后在前台打开钢琴栏。

编辑:结果tor需要几秒钟才能启动,这就是为什么建议的解决方案一开始不起作用。我发布此内容以防有人遇到同样的问题:

function piano {
    tor &
    polipo &
    sleep 3
    pianobar &&
    killall tor
    killall polipo
}

答案1

这就是 shell 脚本的用途;只需键入一个命令即可运行多个命令。以下是一个简短的脚本,我相信它可以满足您的要求:

#!/bin/sh

tor    & tor_pid=$!
polipo & polipo_pid=$!

sleep 5
pianobar

kill $tor_pid
kill $polipo_pid

将其放入一个文件中,也许可以$HOME/local/bin/startpiano使用 使其可执行chmod +x $HOME/local/bin/startpiano,然后添加到变量$HOME/local/bin的末尾PATH

这也是 shell 函数的用途;执行逻辑上不同的任务。您可以创建一个像这样的 shell 函数:

startpiano () {
  tor    & tor_pid=$!
  polipo & polipo_pid=$!

  sleep 5
  pianobar

  kill $tor_pid
  kill $polipo_pid
}

这将进入您的特定 shell 的启动文件之一。

编辑:对于编辑后的问题,我建议不要使用别名,因为现在的任务变得有点太复杂了。不过,我将原封不动地保留有关别名的原始文本。

这也是别名的用途;做简单的事情,你不想一次又一次地打字。这是为其设置别名的方法:

alias startpiano="polipo &; tor &; pianobar"

这也将出现在 shell 的初始化脚本之一中。

这三种解决方案中的任何一种都可以让您键入

$ startpiano

启动您需要的程序。

  • shell 脚本相对于 shell 函数和别名的优势在于,它不会给 shell 初始化文件增加更多权重(除了将其位置附加到变量末尾之外 PATH)。

  • shell 函数比别名有一个好处,您稍后可以向它添加命令行参数(也适用于脚本),并且它是可读的(并且在许多方面的行为就像它自己的“脚本”)。

  • 别名有效,但实际上,别名的唯一用途是用更短的东西替换真正简单的东西,以方便您的指尖,例如命令行标志等lsalias ls="ls -F"这是我唯一的别名)。

答案2

将其放入您的.profile.bashrc.zshrc或您使用的任何 shell 中:

function mycommand {
    tor &
    polipo &
    planobar
}

现在只要跑mycommand

相关内容