【发布时间】:2013-03-17 03:28:18
【问题描述】:
我正在编写函数以将文件中的有效选项替换为我的设置。 1.txt 是这样的:
PasswordAuthentication yes
PermitRootLogin yes
我的函数将处理文件然后输出如下:
#PasswordAuthentication yes
PasswordAuthentication no
#PermitRootLogin yes
PermitRootLogin no
sed 参数来自函数 sed_chain() 生成的字符串,如下所示: 问题是如果 ${pattern} 和 ${option} 之间有空格,那么我得到了错误: sed: -e expression #1, char 46: unterminated `s' command
如果它们之间没有空格,则该函数可以工作,但这不是我想要的。
#!/bin/bash
A="PasswordAuthentication no"
B="PermitRootLogin no"
F="/tmp/1.txt"
sed_chain() {
args=("$@")
file=${@:(-1)}
pattern_params=""
for i in $(seq 0 $(($#-2)))
do
pattern=$(echo ${args[$i]}|cut -d" " -f1)
option=$(echo ${args[$i]}|cut -d" " -f2)
echo $pattern
echo $option
pattern_params="-e s/^[^#]*${pattern}.*$/#&\n${pattern} ${option}/g $pattern_params" # failed
#pattern_params='-e s/^[^#]*'${pattern}'.*$/#&'"\n${pattern}${option}"'/g '${pattern_params} # passed
echo "*** $pattern_params ***"
done
sed $pattern_params $file
}
sed_chain "$A" "$B" "$F"
【问题讨论】:
-
$pattern_params回显什么? -
只是为了调试$pattern_params的内容
-
是的,你去那里做什么?
-
*** -es/^[^#]*PermitRootLogin.*$/#&\nPermitRootLogin no/g -es/^[^#]*PasswordAuthentication.*$/#&\nPasswordAuthentication没有/克***
-
对不起,我被难住了。