我想通过添加一行来就地编辑文件,但前提是尚不存在以使我的脚本防弹。
通常我会做类似的事情:
cat >> ~/.bashrc <<EOF
export PATH=~/.composer/vendor/bin:\$PATH
EOF
也可以通过ansible(line
+ insertafter=EOF
+ regexp
)完成此操作,但这是另一回事了。
在vi / ex中,我可以执行以下操作:
ex +'$s@$@\rexport PATH=\~/.composer/vendor/bin:$PATH@' -cwq ~/.bashrc
但是,然后如何在不重复同一行的情况下理想地检查该行是否已经存在(因此什么也不做)?
或者,也许在Ex编辑器中有一些更简单的方法?
ex ~/.bashrc -c "if search('export PATH=\~\/.composer\/vendor\/bin:\$PATH')>0 | norm quit | endif | norm Aexport PATH=~/.composer/vendor/bin:$PATH"
export
是一个命令,因此该行的其余部分是一个shell单词,而不是赋值。因此,与使用变量赋值(不使用export
)不同,您需要双引号,否则它将在空白处中断。另请参阅如何正确地将路径添加到PATH。
grep -Fq 'export PATH=~/.composer/vendor/bin:$PATH' ~/.bashrc || ex ...
(或者cat
,就此而言)?