Perl 脚本中的 Bash 脚本挂起

Perl 脚本中的 Bash 脚本挂起

我正在 Mac 上的 Perl 脚本中运行一个小型 bash 脚本,但 bash 脚本在完成后似乎挂起。 Perl 脚本不会继续执行。 bash 脚本在 shell 窗口中运行良好。

这是脚本

for f in *.flac
do
    /usr/local/bin/ffmpeg -i "$f" -aq 1 "${f%flac}mp3"
done

我是这样称呼它的

my $mp3Status = system ("/Users/user/bin/flac2mp3_0.sh"); 

答案1

不需要指定bash吗?

system("/bin/bash /Users/user/bin/flac2mp3_0.sh");

编辑:如果仍然不起作用,请尝试使用此语法(相同但末尾带有管道)

system("/bin/bash /Users/user/bin/flac2mp3_0.sh|");

答案2

确保 bash 脚本的顶部有 shebang #!/bin/bash,然后将 exit 0 添加到脚本的最后,以便其他程序知道它已成功退出。

#!/bin/bash
for f in *.flac
do
    /usr/local/bin/ffmpeg -i "$f" -aq 1 "${f%flac}mp3"
done
exit 0

让我们尝试不同的方式

#!/bin/bash
find -name "*.cfg" -type f -exec /usr/local/bin/ffmpeg -i "$f" -aq 1 "${f%flac}mp3" {} \;
done
exit 0

答案3

解决了!!我更改了 Perl 脚本中的引用:

@sysCmd=(`/usr/local/bin/ffmpeg` , '-' , "$t" , ' -aq 1', '${t%flac}mp3');
system (@sysCmd);

现在我可以处理 Perl 脚本的其余部分了。非常感谢所有贡献一些想法的人。

相关内容