从bash脚本创建文本文件

时间:2014-09-09 21:18:42

标签: bash shell unix

我正在使用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的文本字符串,但它不会将其添加到新文件中。对我做错了什么的想法?

2 个答案:

答案 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 worldecho "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'命令之前移动它。