大家好,我现在还在学习bash,但我正在写作 用于安装Docker和CNTLM的工作脚本,因为我们在一些代理后面运行。
我有安装工作,但我正在努力在下面的cntlm.conf文件中更改2个变量占位符。
cnlm.conf
#
# Cntlm Authentication Proxy Configuration
#
# NOTE: all values are parsed literally, do NOT escape spaces,
# do not quote. Use 0600 perms if you use plaintext password.
#
Username $MyUserName
Domain NTADMIN
Password $MyPassWord
# NOTE: Use plaintext password only at your own risk
# Use hashes instead. You can use a "cntlm -M" and "cntlm -H"
# command sequence to get the right config for your environment.
# See cntlm man page
# Example secure config shown below.
PassLM 93409221097752460192457192457999
PassNT 08992693829837928372938729387229
### Only for user 'testuser', domain 'corp-uk'
PassNTLMv2 02793865976487363876348763873467
# Specify the netbios hostname cntlm will send to the parent
# proxies. Normally the value is auto-guessed.
#
# Workstation netbios_hostname
我已经能够改变
将替换行与'sed'一起使用,但我无法从bashscript中使用的变量更改$ MyUserName和$ MyPassWord。
关于我如何做到这一点的任何想法?
答案 0 :(得分:3)
有各种选择:
要在“模板”上使用sed
替换它们并创建新文件,您可以这样做:
sed 's/\$MyPassword/MySuperPassword/' cnlm.conf > cnlm.new.conf
现在,如果您要替换为同一个文件并且您不知道密码的最后一个值,则可以执行以下操作:
sed -ri 's/^(Password *).*$/\1MySuperPassword/' cnlm.conf
如果您的新密码在shell变量中,那么您可以执行最后一个命令:
newPasswd="abcde"
sed -ri "s/^(Password *).*$/\1${newPasswd}/" cnlm.conf
最后,如果要在同一命令中更改用户名和密码:
newUser="user123"
newPasswd="abcde"
sed -ri "s/^(Username *).*$/\1${newUser}/; s/^(Password *).*$/\1${newPasswd}/" cnlm.conf