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

see*_*con 2 shell process tor polipo

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

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

function piano {
    tor &
    polipo &
    sleep 3
    pianobar &&
    killall tor
    killall polipo
}
Run Code Online (Sandbox Code Playgroud)

Kus*_*nda 7

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

#!/bin/sh

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

sleep 5
pianobar

kill $tor_pid
kill $polipo_pid
Run Code Online (Sandbox Code Playgroud)

把它放在一个文件中,也许$HOME/local/bin/startpiano,让它可执行chmod +x $HOME/local/bin/startpiano,并添加$HOME/local/binPATH变量的末尾。

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

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

  sleep 5
  pianobar

  kill $tor_pid
  kill $polipo_pid
}
Run Code Online (Sandbox Code Playgroud)

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

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

这也是别名的用途;做一些你不想一次又一次输入的简单事情。这是您为其设置别名的方式:

alias startpiano="polipo &; tor &; pianobar"
Run Code Online (Sandbox Code Playgroud)

这也将进入您的 shell 的初始化脚本之一。

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

$ startpiano
Run Code Online (Sandbox Code Playgroud)

启动您需要的程序。

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

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

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