![如何使用单个命令启动多个进程?](https://linux22.com/image/90229/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E5%8D%95%E4%B8%AA%E5%91%BD%E4%BB%A4%E5%90%AF%E5%8A%A8%E5%A4%9A%E4%B8%AA%E8%BF%9B%E7%A8%8B%EF%BC%9F.png)
我用pianobar
播放器。但在启动它之前,我需要运行tor
和polipo
。两者都是连续的(一直运行直到中断)。基本上我正在寻找的是一个单一的命令,它将生成tor
并polipo
处理(不需要它们的输出),然后在前台打开钢琴栏。
编辑:结果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 函数比别名有一个好处,您稍后可以向它添加命令行参数(也适用于脚本),并且它是可读的(并且在许多方面的行为就像它自己的“脚本”)。
别名有效,但实际上,别名的唯一用途是用更短的东西替换真正简单的东西,以方便您的指尖,例如命令行标志等
ls
(alias ls="ls -F"
这是我唯一的别名)。
答案2
将其放入您的.profile
或.bashrc
或.zshrc
或您使用的任何 shell 中:
function mycommand {
tor &
polipo &
planobar
}
现在只要跑mycommand