![Perl 脚本中的 Bash 脚本挂起](https://linux22.com/image/167338/Perl%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E7%9A%84%20Bash%20%E8%84%9A%E6%9C%AC%E6%8C%82%E8%B5%B7.png)
我正在 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 脚本的其余部分了。非常感谢所有贡献一些想法的人。