首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用bash脚本中的vim替换字符

使用bash脚本中的vim替换字符
EN

Stack Overflow用户
提问于 2015-09-11 13:02:02
回答 2查看 340关注 0票数 1

我想要构建一个小的util脚本,它将替换给定文件中的字符。到目前为止我的情况是这样的。当我运行这个程序时,我会看到我的回显消息,但是程序永远不会返回。如果我手动退出程序,就没有效果。所以它似乎挂在某处,但我不知道为什么。

代码语言:javascript
运行
复制
sEnv=$1
eEnv=$2
reverseArgs=$3
echo ${reverseArgs}
if [ "$3" == "-r" ]; then
   echo "changing from ${eEnv} to ${sEnv}"
   cmd="vim -E -s /Users/X/nginx.conf << EOF\
   :%s/${eEnv}/${sEnv}/g\
   :wq\
   EOF"
   `${cmd}`
else
   echo "changing from ${sEnv} to ${eEnv}"
   cmd="vim -E -s /Users/X/nginx.conf << EOF\
   :%s/${sEnv}/${eEnv}/g\
   :wq\
   EOF"
   `${cmd}`
fi
EOF

我知道它应该起作用,因为如果我把它放在我的脚本中,它就能工作了:

代码语言:javascript
运行
复制
vim -E -s /Users/X/nginx.conf << EOF
   :%s/${eEnv}/${sEnv}/g
   :wq
   EOF
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-11 13:30:12

不知道为什么要通过变量cmd。尝试:

代码语言:javascript
运行
复制
sEnv=$1
eEnv=$2
reverseArgs=$3
echo ${reverseArgs}
if [ "$3" == "-r" ]; then
   echo "changing from ${eEnv} to ${sEnv}"
   vim -E -s - /Users/X/nginx.conf <<EOF
   :%s/${eEnv}/${sEnv}/g
   :wq
EOF
else
   echo "changing from ${sEnv} to ${eEnv}"
   vim -E -s - /Users/philippeguay/nginx.conf <<EOF
   :%s/${sEnv}/${eEnv}/g
   :wq
EOF
fi

我为我的vim添加了-s -,我认为它将文件名作为脚本。注意EOF不能缩进。

票数 2
EN

Stack Overflow用户

发布于 2015-09-11 13:34:56

正如@trojanfoe首先建议的那样,您应该在这样的工作中使用sed。更适合:

代码语言:javascript
运行
复制
sed -i "s/${eEnv}/${sEnv}/g" ${file}

不过,用vim可以做到这一点。您的尝试不起作用的原因是,您正在构建要作为字符串执行的命令,在此过程中,将您的heredoc压缩为一个普通的字符串。当您可以直接执行命令时,我看不出这有什么用:

代码语言:javascript
运行
复制
vim -E -s /Users/philippeguay/nginx.conf << EOF
:%s/${sEnv}/${eEnv}/g
:wq
EOF
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32524158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档