2015-02-12 59 views
0

我试图从bash脚本触发的bash脚本中运行以下两个任务。当我将其他注释掉时,这两个都正确执行,这显然是我错误地布置完整作业的方式。单个bash脚本中的多个连续执行任务

他们应该按顺序运行,而不是并行的,所以第一个EXEC需要完成第二个开始前...

我也应该注意到,这些变量被从PHP脚本,通过传递触发它(如果它是相关的)。

#!/bin/bash 

Udata1=$1 
Udata2=$2 

#Encode incoming audio file to 128k MP3 using avconv 
exec avconv - i /var/www/html/tracks/$Udata1/$Udata2 -ab 128k /var/www/html/tracks/$Udata1/serve/$Udata2.128k.mp3; 

#Encode 128k MP3 generated above to WAV using avconv 
exec avconv -i /var/www/html/tracks/$Udata1/serve/$Udata2.128k.mp3 /varwww/html/dump/$Udata2.wav 

exit; 

我想我最好问的是如何在同一个.sh脚本中运行多个exec?

+2

'一个bash脚本被一个php脚本触发'确保你非常清楚这样做的安全含义。 – 2015-02-12 00:08:24

+0

是的,我完全知道谢谢。通过一个包含在完全不同的PHP页面上的方式调用这个PHP。这并不是说这只是坐在网络服务器上供访问者点击。当然有人知道他们在做什么和寻找什么可能会违反它,但是真的不是这样吗?我欣赏这个建议。 – Grant 2015-02-12 00:20:00

+0

将PHP配置为允许它执行操作系统进程的安全性要远远低于不进行配置。在这种情况下,我通常会根据需要设置一个标志(在数据库,文件系统等中),或者将某些内容推送到消息队列中以触发外部进程运行,而不是直接启动进程。 – 2015-02-12 00:23:39

回答

1

exec用生成的进程替换当前正在运行的进程。它永远不会返回。你不能exec这样的事情。

这就是说你不需要。只需从这两行删除exec,它应该可以正常工作。

+0

砰! :)好,所以你今天教了我一些关键的东西!非常感谢你Etan!如果我也想在同一个脚本中运行不同程序的混合,这同样适用吗? – Grant 2015-02-12 00:16:18

+1

是的。你运行的并不重要。一个命令是一个命令,并阻止脚本直到它完成,除非你把它放在后台或将它放入后台。 – 2015-02-12 00:18:20

+0

我确实认为命令在运行时会按顺序阻止脚本,但确认后很好!谢啦 ;) – Grant 2015-02-12 00:22:56