[英]macos shell script not returning control
I'm running a Perl script on High Sierra which calls a bash shell script using the 'system' command, but it is not returning control back to the Perl script.
@sysCmd=('~/bin/2mp3.1.sh');
system(@sysCmd) == 0 || die "system command failed: $?\n";
我对“系统”的理解是,与“执行”不同,它应该返回到调用脚本。 bash 脚本:
for i in *.flac ; do
~/bin/ffmpeg -i "$i" -acodec libmp3lame "$(basename "${i/.flac}")".mp3
sleep 1
done
完成后,Perl 脚本应该从中断处继续并继续,但没有乐趣。 请欣赏一些想法。 我穿着石棉裤以防万一:)
找到运行脚本的perl命令的tty,然后执行:
tty=ttyOfPerlCommandRunningYourScript
while [ 1 ]; do
clear
date
ps -ft $tty
sleep 1
done
如果 perl 脚本的 tty 类似于/dev/ttys010
,则设置tty=ttys010
。
由于子 shell 脚本正在遍历其文件,因此您可以执行ls *.flac | nl -ba
ls *.flac | nl -ba
并找到 ffmpeg 当前执行的文件的ffmpeg
以估计 shell 脚本将继续运行多长时间。
您可以按control-C
终止上述while
循环。 您还可以使用向上和向下箭头键循环浏览命令历史记录以重新启动该循环。
在上述while
循环的任何迭代中,您都应该看到子bash
命令及其任何子命令。 如果子ffmpeg
命令当前正在执行,则该命令行上的文件名表示当前正在处理的文件。 搜索ls
命令的 output 以查看您当前的进度。
已解决将转换脚本更改为使用“flac”而不是“ffmpeg”的脚本。
#!/bin/sh
#
# http://hints.macworld.com/article.php?story=20040323004759816
# flacmp3 - convert a flac file to mp3
#
if [ "$1" ]
then
for file
do
if [ -e "$file" ]
then
/usr/local/bin/flac -c -d "$file" | /usr/local/bin/lame -h -m s -b 192 - "$(basename "$file" .flac).mp3"
else
echo >&2 "No such file: "$1""
exit 1
fi
done
else
echo >&2 "Usage: "$(basename "$0")" INPUTFILE [...]"
exit 1
fi
问题解决了。 但我仍在试图确定它之前失败的原因。 非常感谢所有在特殊的日子里花时间花在这上面的人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.