我正在使用ffmpeg
及其字幕库,使用gifify(从jclem分叉)使用更简单的方法制作带字幕的动画GIF。我尝试在我的脚本中添加一个变量,查找可选参数,但我甚至无法创建必要的临时.srt
文件。
我的脚本创建.txt
作为概念验证:
#!/bin/bash
while getopts "t" opt; do
case opt in
t) text=$OPTARG;;
esac
done
shift $(( OPTIND - 1 ))
subtitles=$1
#If there is text present, do this
if [ -z ${text} ]; then
#Make an empty txt file
cat >> /tmp/subs.txt
text=$subtitles
append ${text}
fi
然后我用:
运行它 sh text.sh -t "This is my text"
脚本运行并将回显您放入shell的文本字符串,但它不会将其添加到新文件中。对我做错了什么的想法?
答案 0 :(得分:1)
1)您需要case $opt
。
while getopts "t:" opt; do
case $opt in
t) text=$OPTARG;;
esac
done
shift $(( OPTIND - 1 ))
subtitles=$1
然后,
if [ -z "$text" ]; then #safer and just as long as the curly bracket version
#Make an empty txt file
: > /tmp/subs.txt #This is how you create an empty file
cat /dev/null > /tmp/subs.txt #A longer version of the same thing
#cat >> /tmp/subs.txt #This APPENDS standard input (STDIN) to /tmp/subs.txt
text="$subtitles"
#append ${text} #`append` isn't bash
echo "$subtitles" > /tmp/subs.txt #the .txt file will contain what's in $subtitles
fi
编辑: @Etan Reisner对引号提出了一个很好的观点。
1)你在text=$subtitles
中不需要它们; bash处理这个好
2)在你echo $subtitles
的情况下你也不需要它们 - echo可以使用多个参数,这是一个裸$字幕扩展到 - 但你最好把它们放在那里,到使其适用于以下情况:
a='-e hello\nworld'
echo "$a" #Without the qutoes, $a would get expanded and `-e` would get treated as a flag to `echo`
我认为在防御中引用bash中的变量是一个好习惯,而不是依赖于1)中的赋值中的那些怪癖,或者回声不区分echo hello world
和echo "hello world"
。
答案 1 :(得分:0)
这个问题有点不清楚,但我相信你的基本问题是如何创建或附加文件。以下是创建新文件或将其附加到shell脚本中的方法。希望这会有所帮助。您可以按照自己的方式使用它 - >
创建文件 - >
cat<<EOF>/tmp/subs.txt
${text}
EOF
OR
echo "${text}" >/tmp/subs.txt
附加文件(注意额外的'&gt;') - &gt;
cat<<EOF>>/tmp/subs.txt
${text}
EOF
OR
echo "${text}" >>/tmp/subs.txt
如果您不保持文本左对齐,则由于制表符或空格,EOF有时不起作用。
另外关于“text = $ subtitles”;你不能在'cat'之后做那个操作,所以在'cat'命令之前移动它。