使用bash脚本将一些行写入文件

时间:2011-10-19 14:41:58

标签: bash sh

如何在bash脚本中将某些行写入文件?

我想将以下内容写入文件~/.inputrc

"\e[A": history-search-backward
"\e[B": history-search-forward
"\e[C": forward-char
"\e[D": backward-char

目前我有这个工作但有些丑陋的方法,我相信应该有更好的方法。

#!/bin/sh
echo \"\\e[A\": history-search-backward > ~/.inputrc 
echo \"\\e[B\": history-search-forward >> ~/.inputrc
echo \"\\e[C\": forward-char >> ~/.inputrc
echo \"\\e[D\": backward-char >> ~/.inputrc

4 个答案:

答案 0 :(得分:11)

一种稍微简单的方法是:

cat > ~/.inputrc << "EOF"
"\e[A": history-search-backward
"\e[B": history-search-forward
"\e[C": forward-char
"\e[D": backward-char
EOF

我很好奇为什么你需要这样做。如果要设置包含某些特定文本的文件,则可能应创建框架文件,并将其转储到/etc/skel。然后,您可以在脚本中cp /etc/skel/.inputrc ~/.inputrc

答案 1 :(得分:3)

使用here document

#!/bin/bash
cat >~/.inputrc <<EOF
"\e[A": history-search-backward
"\e[B": history-search-forward
"\e[C": forward-char
"\e[D": backward-char
EOF

这使您可以将数据内联到shell脚本中。字符串EOF可以是您想要的任何内容,因此只需选择输入中未出现的任何字符串。

答案 2 :(得分:2)

echo命令用于简单字符串以外的操作可能很复杂且不可移植。有echo的GNU版本(coreutils的一部分),你可能在MacOS上找到的BSD版本,大多数shell都有echo作为内置命令。所有这些不同的版本可以采用略有不同的方式处理选项命令行选项(-n以禁止尾随换行,-c / -C启用或禁用反斜杠转义)和转义({{ {1}}可能是也可能不是转义字符的编码。)

\e救援。

printf可能以printf和/或/usr/bin/printf的形式提供,它也是一些shell中的内置(无论如何都是bash和zsh),但它的行为更加一致

Here's the GNU coretuils printf documentation.

对于您的示例,您可以写:

/bin/printf

答案 3 :(得分:0)

这就是它。

这是减少冗余的一种方法:

TEXT="\"\\e[A\": history-search-backward 
\"\\e[B\": history-search-forward 
\"\\e[C\": forward-char 
\"\\e[D\": backward-char"

echo "$TEXT" > ~/.inputrc