0

我编写了一个调用 ffmpeg 工具的 shell 脚本,但是当我运行它时,它说 No such file or directory 但它确实如此!

这是我的脚本:

#!/bin/bash

MAIN_DIR="/media/sf_data/pipeline"

FFMPEG_DIR="/media/sf_data/livraison_transcripts/ffmpeg-git-20180208-64bit-static"

for file in MAIN_DIR/audio_mp3/*.mp3;
do
    cp -p file FFMPEG_DIR;
done

for file in FFMPEG_DIR/*.mp3;
do
    ./ffmpeg -i ${file%.mp3}.ogg
    sox $file -t raw --channels=1 --bits=16 --rate=16000 --encoding=signed-
integer --endian=little ${file%.ogg}.raw;
done

for file in FFMPEG_DIR/*.raw;
do
    cp -p file MAIN_DIR/pipeline/audio_raw/;
done

这是调试响应:

cp: cannot stat ‘file’: No such file or directory
./essai.sh: line 14: ./ffmpeg: No such file or directory
sox FAIL formats: can't open input file `FFMPEG_DIR/*.mp3': No such file or 
directory
cp: cannot stat ‘file’: No such file or directory

仅供参考,我在 VirtualBox 上运行 CentOS7

谢谢

4

2 回答 2

1

这是一个最小、完整和可验证的示例(MCVE),它是您的脚本的一个版本,它删除了显示问题所不需要的所有内容:

#!/bin/bash
MAIN_DIR="/media/sf_data/pipeline"
echo MAIN_DIR

预期输出:

/media/sf_data/pipeline

实际输出:

MAIN_DIR

这是因为在扩展变量时bash需要一个:$

#!/bin/bash
MAIN_DIR="/media/sf_data/pipeline"
echo "$MAIN_DIR"

引号不是解决问题所必需的,但可以防止出现空格问题。

于 2018-03-15T10:34:11.453 回答
0

嗨,您需要在您的 shell 脚本中进行一些更正,见下文。要获得分配给变量的实际值,您需要$在 shell 脚本中的变量前面添加。

for file in $"MAIN_DIR"/audio_mp3/*.mp3;
do
   cp -p "$file" "$FFMPEG_DIR";
done

for file in "$FFMPEG_DIR"/*.mp3;

./ffmpeg -i ${file%.mp3}.ogg
#provide full path like /usr/bin/ffmpeg

for file in "$FFMPEG_DIR"/*.raw;
do
   cp -p "$file" "$MAIN_DIR"/pipeline/audio_raw/;
done
于 2018-03-15T10:34:05.403 回答