如何在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
答案 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)
#!/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