shell脚本没有这样的文件或目录

时间:2018-03-15 10:13:52

标签: shell ffmpeg centos nosuchfileexception

我编写了一个调用ffmpeg工具的shell脚本,但是当我运行它时,它说没有这样的文件或目录呢!

这是我的剧本:

#!/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

谢谢

2 个答案:

答案 0 :(得分:1)

这是一个Minimal, Complete, and Verifiable example(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"

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

答案 1 :(得分: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