我想要构建一个小的util脚本,它将替换给定文件中的字符。到目前为止我的情况是这样的。当我运行这个程序时,我会看到我的回显消息,但是程序永远不会返回。如果我手动退出程序,就没有效果。所以它似乎挂在某处,但我不知道为什么。
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
我知道它应该起作用,因为如果我把它放在我的脚本中,它就能工作了:
vim -E -s /Users/X/nginx.conf << EOF
:%s/${eEnv}/${sEnv}/g
:wq
EOF
发布于 2015-09-11 13:30:12
不知道为什么要通过变量cmd。尝试:
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不能缩进。
发布于 2015-09-11 13:34:56
正如@trojanfoe首先建议的那样,您应该在这样的工作中使用sed
。更适合:
sed -i "s/${eEnv}/${sEnv}/g" ${file}
不过,用vim
可以做到这一点。您的尝试不起作用的原因是,您正在构建要作为字符串执行的命令,在此过程中,将您的heredoc压缩为一个普通的字符串。当您可以直接执行命令时,我看不出这有什么用:
vim -E -s /Users/philippeguay/nginx.conf << EOF
:%s/${sEnv}/${eEnv}/g
:wq
EOF
https://stackoverflow.com/questions/32524158
复制相似问题