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

Jer*_*ams 4 command-line bash scripts echo

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

注意:该文件确实有效

if [ ! -e ~/.conf/file/path ]; then
   touch ~/.conf/file/path
   echo "
    long
    conf
    list
    here
    ..." >> ~/.conf/file/path
fi
Run Code Online (Sandbox Code Playgroud)

Tho*_*ard 5

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

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


Ser*_*nyy 2

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

至于将长多行配置打印到文件中,Panther 已经在Thomas 的回答下的评论中暗示使用此处文档。这是我个人在脚本中编写“帮助消息”或选项信息时常用的技术

你可以轻松地做这样的事情:

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$ 
Run Code Online (Sandbox Code Playgroud)

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

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$ 
Run Code Online (Sandbox Code Playgroud)