【发布时间】:2021-04-03 06:57:46
【问题描述】:
我在 High Sierra 上运行一个 Perl 脚本,它使用“system”命令调用一个 bash shell 脚本,但它没有将控制权返回给 Perl 脚本。
@sysCmd=('~/bin/2mp3.1.sh');
system(@sysCmd) == 0 || die "system command failed: $?\n";
我对“system”的理解是,与“exec”不同,它应该返回到调用脚本。 bash 脚本:
for i in *.flac ; do
~/bin/ffmpeg -i "$i" -acodec libmp3lame "$(basename "${i/.flac}")".mp3
sleep 1
done
一旦完成,Perl 脚本应该会从中断处继续并继续,但没有乐趣。 请欣赏一些想法。我穿着石棉裤以防万一:)
【问题讨论】:
-
Re "一旦完成,Perl 脚本应该从中断处继续并继续",确实如此。
system将在 shell 退出后立即返回。 -
您等待它完成多长时间,当您直接在相同的输入上运行该 bash 程序需要多长时间?
-
当它在终端中从 CL 运行时,它会在几分钟内完成大约 12 次转换,并返回到提示符。从 Perl 脚本中,我可以看到在 Finder 中创建的 .mp3 文件,但即使它们都已完成,Perl 脚本也不会在应有的地方找到。它似乎以某种方式挂断了脚本。
-
我已经取出了“睡眠”命令并在完成后添加了“退出 0”。 .mp3 文件已创建,但控制权不会传回给 Perl。
-
在调用任何其他命令或脚本时,
system是否似乎挂起?将echo命令放入您的shell 脚本中,以打印出每行之间它在做什么的消息。system("~/bin/2mp3.1.sh")有什么不同吗?~/bin/2mp3.1.sh真的解析为您认为的文件吗?什么是 shell 脚本的 shebang 行?我只是在想办法限制问题。