Bash 脚本生成的命令在控制台有效但在脚本中无效
Bash script generated command valid on console but not in script
下面的谜题:我写了一个 bash 脚本
从 mp4 文件中提取无图片 mp3 的任务。这个初稿的想法是只使用
avconv -i input.mp4 output.mp3
在控制台上运行良好。
#!/bin/bash
# "extract_mp3_from_mp4.sh test.mp4 test.mp3"
if [ $# == 0 ]; then
echo -e "Extracts mp3 from mp4 video.\nUsage: [=12=] src_mp4 [target_mp3=src_mp4.mp3];"
exit 0;
fi;
file_in=;
file_out=;
if [ -z $file_out ]; then file_out="${file_in}.mp3"; fi;
echo "Attempting to extract '${file_in}' to '${file_out}'";
cmd="avconv -i ${file_in} ${file_out};";
echo "Casting command: ${cmd}";
exit `$cmd`;
考虑通话
./extract_mp3_from_mp4.sh test.mp4 test.mp3
正在生成命令
avconv -i test.mp4 test.mp3;
令我困惑的是:脚本创建的命令是
绝对有效。如果我从生成的输出中复制它
echo "Casting command: ..." 直接进入控制台
命令按预期工作。但是在脚本中使用时
(退出$cmd
) avconv returns
Unable to find a suitable output format for 'test.mp3;
怎么可能?
问题是分号:
cmd="avconv -i ${file_in} ${file_out};";
应该是
cmd="avconv -i ${file_in} ${file_out}";
我基本上建议不要在 BASH 脚本中使用分号,因为这种情况经常发生
下面的谜题:我写了一个 bash 脚本 从 mp4 文件中提取无图片 mp3 的任务。这个初稿的想法是只使用
avconv -i input.mp4 output.mp3
在控制台上运行良好。
#!/bin/bash
# "extract_mp3_from_mp4.sh test.mp4 test.mp3"
if [ $# == 0 ]; then
echo -e "Extracts mp3 from mp4 video.\nUsage: [=12=] src_mp4 [target_mp3=src_mp4.mp3];"
exit 0;
fi;
file_in=;
file_out=;
if [ -z $file_out ]; then file_out="${file_in}.mp3"; fi;
echo "Attempting to extract '${file_in}' to '${file_out}'";
cmd="avconv -i ${file_in} ${file_out};";
echo "Casting command: ${cmd}";
exit `$cmd`;
考虑通话
./extract_mp3_from_mp4.sh test.mp4 test.mp3
正在生成命令
avconv -i test.mp4 test.mp3;
令我困惑的是:脚本创建的命令是
绝对有效。如果我从生成的输出中复制它
echo "Casting command: ..." 直接进入控制台
命令按预期工作。但是在脚本中使用时
(退出$cmd
) avconv returns
Unable to find a suitable output format for 'test.mp3;
怎么可能?
问题是分号:
cmd="avconv -i ${file_in} ${file_out};";
应该是
cmd="avconv -i ${file_in} ${file_out}";
我基本上建议不要在 BASH 脚本中使用分号,因为这种情况经常发生