我编写了一个调用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
谢谢
答案 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