BashスクリプトはPerlスクリプトで中断されます。

BashスクリプトはPerlスクリプトで中断されます。

私のMacでは、Perlスクリプトで小さなbashスクリプトを実行していますが、bashスクリプトが完了した後に停止するようです。 Perlスクリプトはまだ実行されません。 bashスクリプトはシェルウィンドウでうまく動作します。

これはスクリプトです。

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があることを確認してから、他のプログラムで正常に終了したことを確認するために、スクリプトの最後に終了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スクリプトの残りの部分を操作できます。アイデアを提供してくれた皆さんに感謝します。

関連情報