在流动供应期间使用Sed将行附加到文件

时间:2015-09-05 22:19:37

标签: ruby linux string

我目前正在使用Vagrant来设置运行Ubuntu的开发机器。我想在我的.profile添加几行,使用$PATH将目录添加到sed变量中。为此,我将这些行添加到我的机器的Vagrantfile

config.vm.provision "shell", inline:
    "sudo sed -i \'$ a if [ -d \\\"/usr/local/lib\\\" ]; then\n    PATH=\\\"/usr/local/lib:$PATH\\\"\nfi\' /home/vagrant/.profile"

据我所知和测试,我已经逃脱了让Vagrant运行此有效shell命令所需的所有角色:

sudo sed -i '$ a if [ -d \"/usr/local/lib\" ]; then\n    PATH=\"/usr/local/lib:$PATH\"\nfi' /home/vagrant/.profile

将这些行添加到我的.profile

if [ -d "usr/local/lib" ]; then
    PATH="usr/local/lib:$PATH"
fi

但是,当我执行vagrant up时,我在尝试运行命令时收到以下错误:

==> default: Running provisioner: shell...
default: Running: inline script
==> default: stdin: is not a tty
==> default: sed: -e expression #1, char 44: extra characters after command
The SSH command responded with a non-zero exit status.

我在Vagrantfile代码的某个地方犯了错误,或者这里出现了其他问题?

1 个答案:

答案 0 :(得分:2)

修复“sed:-e expression#1,char 44:命令后的额外字符”,转义\ n,即为所有\ n添加另一个反斜杠:

config.vm.provision "shell", inline:
"sudo sed -i \'$ a if [ -d \\\"/usr/local/lib\\\" ] then\\n    PATH=\\\"/usr/local/lib:$PATH\\\"\\nfi\' /home/vagrant/.profile"