除了使用 touch 和 echo 之外,有没有更好的方法在 bash 中创建文件?

除了使用 touch 和 echo 之外,有没有更好的方法在 bash 中创建文件?

我创建了一个 bash 脚本,用于安装一些应用程序并编写一个 .conf 文件。我希望我的 bash 脚本为我创建该文件,这样我就可以运行该文件并设置好一切。有没有比这更好的方法,或者我是否以最好的方式完成了这件事。只是想知道我还有什么其他选择。

注意:该文件确实有效

if [ ! -e ~/.conf/file/path ]; then
   touch ~/.conf/file/path
   echo "
    long
    conf
    list
    here
    ..." >> ~/.conf/file/path
fi

答案1

echo "text" >> /path/to/file如果文件不存在就执行此操作。

文本重定向和附加的妙处在于,如果您的输出是文件路径,并且该文件尚不存在,则无论是否使用>或,它都会创建该文件。通常根本>>不需要该文件。(但是,如果您确定该文件不存在,只需使用 ;而不是;即可附加到文件,但如果该文件不存在,那么......)touch>>>>>

答案2

就您的脚本而言,您可以使用>重定向到文件。您询问文件是否不存在(最好将其表示为if ! [ -e ~/.conf/file/path ];),因此在此特定情况下无需使用append运算符(即使它可以正常工作)。

至于将长多行配置打印到文件中,Panther 已经暗示使用这里有文档在他的评论在下面托马斯的回答这是我在脚本中编写“帮助消息”或选项信息时经常使用的一种技巧

你可以很容易地做这样的事情:

bash-4.3$ cat <<EOF > out.txt
parameter1="value 1"
parameter2="value 2"
EOF
bash-4.3$ cat out.txt
parameter1="value 1"
parameter2="value 2"
bash-4.3$ 

或者创建一个特定的函数,write_config()使你的脚本更加符合惯用语言,可以这么说:

#!/usr/bin/env bash
# note usage of $HOME variable instead of ~
my_config="$HOME/my_conf_file.txt"
# declare all functions at the top
config_exists()[[ -e "$my_config" ]]

write_config(){
    cat > "$my_config" <<EOF
parameter1="value 1"
parameter2="varlue 2"
EOF
}

if ! config_exists;
then
    echo "config doesn't exist"
    write_config
fi

答案3

如果“长配置列表”太长,影响了 shell 脚本的可读性,为什么不直接把它放到脚本附带的单独文件中呢?然后,在 shell 脚本中,您只需将该文件复制到目标位置即可。

if [ ! -e ~/.conf/file/path ]; then
   cp /path/to/mytemplate ~/.conf/file/path
fi

相关内容