Answers:
cat >> filename
This is text, perhaps pasted in from some other source.
Or else entered at the keyboard, doesn't matter.
^D
本质上,您可以将所需的任何文本转储到文件中。CTRL-D发送文件结束信号,该信号终止输入并将您返回到Shell。
sudo !!
-执行带sudo
前缀的最后一个命令。我最近发现这也适用于nano
etc(通过意外尝试nano nano auth
...)
!!
以前没用过,太棒了。因此,我经常做类似的事情cat /var/log/apache/error.log
并获得许可被拒绝。这也可以使用历史记录中的id来完成,例如sudo !1419
,这将以1419
sudo的形式在历史记录中的行处执行命令。
怎么样:
echo "hello" >> <filename>
使用>>
运算符会将数据追加到文件末尾,而使用运算符将>
覆盖文件内容(如果已存在)。
您也可以使用printf
相同的方式:
printf "hello" >> <filename>
请注意,使用上述内容可能很危险。例如,如果您已经有一个文件,并且需要在文件末尾附加数据,而您忘记添加最后一个>
文件,则文件中的所有数据都会被破坏。您可以通过noclobber
在您的中设置变量来更改此行为.bashrc
:
set -o noclobber
现在,当您尝试执行此操作时echo "hello" > file.txt
,将会收到警告语cannot overwrite existing file
。
要强制写入文件,您现在必须使用特殊语法:
echo "hello" >| <filename>
您还应该知道,默认情况下echo
会添加一个尾随换行符,可以通过使用-n
标志来抑制它:
echo -n "hello" >> <filename>
参考文献
cat
,而不是使用,但您最好确保使用>>
而不是>
!
sudo rm -r /
=)
sudo rm -r /
不是sudo rm -rf /
!^ _ ^是否有一个标志会在用覆盖现有文件的内容之前要求确认>
?始终使用这样的标志的别名似乎是个好主意。
set -o noclobber
您的内容,.bashrc
然后您将不使用特殊语法就无法覆盖现有文件echo "hello" >| <filename>
其他可能的方法是:
echo "text" | tee -a filename >/dev/null
在-a
将附加在文件的结尾。
如果需要sudo
,请使用:
echo "text" | sudo tee -a filename >/dev/null
>/dev/null
末防止“文本”,以在控制台上显示。
跟踪接受的答案。
如果在脚本中使用结束符,则需要CTRL-D以外的其他东西来指定结束符。尝试以下方法:
cat << EOF >> filename
This is text entered via the keyboard or via a script.
EOF
这会将文本追加到指定的文件(不包括“ EOF”)。
它利用了here文档(或heredoc)。
但是,如果您需要sudo来附加到指定的文件,那么如果您直接在命令行上输入,则由于I / O重定向,在使用heredoc时会遇到麻烦。
当您直接在命令行上键入时,此变体将起作用:
sudo sh -c 'cat << EOF >> filename
This is text entered via the keyboard.
EOF'
或者您也可以使用它tee
来避免在将heredoc与cat一起使用时出现命令行sudo问题:
tee -a filename << EOF
This is text entered via the keyboard or via a script.
EOF
cat << 'EOF' >
多年了,不知道cat << 'EOF' >>
要追加!谢谢