繁体   English   中英

macos shell 脚本不返回控制

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM