Shell 使用 SED 时出现脚本错误
Shell script error while using SED
您好,我想在一个文件上同时使用多个 sed 命令 (cinder.conf)。我的 shell 文件 (test.sh) 看起来像
sed -i '/[DEFAULT]/s/$/\nrpc_backend = rabbit\nauth_strategy = keystone\nmy_ip = INPUTREQ\nverbose = True\nenabled_backends = lvm\nglance_host = controller/' /etc/cinder/cinder.conf
sed -i '/[oslo_messaging_rabbit]/s/$/\nrabbit_host = controller\nrabbit_userid = openstack\nrabbit_password = 1234/' /etc/cinder/cinder.conf
我的原始输出文件看起来像
[DEFAULT]
[oslo_messaging_rabbit]
当我尝试执行 shell 文件 (test.sh) 时,输出看起来像
[DEFAULT]
rpc_backend = rabbit
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = 1234
auth_strategy = keystone
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = 1234
my_ip = INPUTREQ
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = 1234
verbose = True
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = 1234
enabled_backends = lvm
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = 1234
glance_host = controller
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = 1234
[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = 1234
但是当我尝试在原始文件 (cinder.conf) 上执行单个 SED 命令时,它工作得很好。只有当我一次使用多个SED命令购买运行 test.sh 文件时,我的原始文件输出如上所示。我正在使用 Centos。我是脚本新手。请帮我解决错误。
我的方案是向 cinder.con 文件添加几行(使用 shell 脚本)。最终输出应该像
[DEFAULT]
rpc_backend = rabbit
auth_strategy = keystone
my_ip = INPUTREQ
verbose = True
enabled_backends = lvm
glance_host = controller
[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = 1234
使用 \
转义 [
和 ]
:
sed -i '/\[DEFAULT\]/s/$/\nrpc_backend = rabbit\nauth_strategy = keystone\nmy_ip = INPUTREQ\nverbose = True\nenabled_backends = lvm\nglance_host = controller/' /etc/cinder/cinder.conf
sed -i '/\[oslo_messaging_rabbit\]/s/$/\nrabbit_host = controller\nrabbit_userid = openstack\nrabbit_password = 1234/' /etc/cinder/cinder.conf
您好,我想在一个文件上同时使用多个 sed 命令 (cinder.conf)。我的 shell 文件 (test.sh) 看起来像
sed -i '/[DEFAULT]/s/$/\nrpc_backend = rabbit\nauth_strategy = keystone\nmy_ip = INPUTREQ\nverbose = True\nenabled_backends = lvm\nglance_host = controller/' /etc/cinder/cinder.conf
sed -i '/[oslo_messaging_rabbit]/s/$/\nrabbit_host = controller\nrabbit_userid = openstack\nrabbit_password = 1234/' /etc/cinder/cinder.conf
我的原始输出文件看起来像
[DEFAULT]
[oslo_messaging_rabbit]
当我尝试执行 shell 文件 (test.sh) 时,输出看起来像
[DEFAULT]
rpc_backend = rabbit
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = 1234
auth_strategy = keystone
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = 1234
my_ip = INPUTREQ
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = 1234
verbose = True
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = 1234
enabled_backends = lvm
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = 1234
glance_host = controller
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = 1234
[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = 1234
但是当我尝试在原始文件 (cinder.conf) 上执行单个 SED 命令时,它工作得很好。只有当我一次使用多个SED命令购买运行 test.sh 文件时,我的原始文件输出如上所示。我正在使用 Centos。我是脚本新手。请帮我解决错误。
我的方案是向 cinder.con 文件添加几行(使用 shell 脚本)。最终输出应该像
[DEFAULT]
rpc_backend = rabbit
auth_strategy = keystone
my_ip = INPUTREQ
verbose = True
enabled_backends = lvm
glance_host = controller
[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = 1234
使用 \
转义 [
和 ]
:
sed -i '/\[DEFAULT\]/s/$/\nrpc_backend = rabbit\nauth_strategy = keystone\nmy_ip = INPUTREQ\nverbose = True\nenabled_backends = lvm\nglance_host = controller/' /etc/cinder/cinder.conf
sed -i '/\[oslo_messaging_rabbit\]/s/$/\nrabbit_host = controller\nrabbit_userid = openstack\nrabbit_password = 1234/' /etc/cinder/cinder.conf