2017-11-01 6 views
0

안녕하세요. 저는 아직 배시를 배우고 있습니다 만, Docker와 CNTLM을 설치하는 데 사용되는 스크립트는 입니다. 우리는 일부 프록시를 사용하고 있기 때문에이 스크립트를 작성하고 있습니다.bash를 사용하여 .conf 파일의 단일 자리 표시자를 바꿉니다

설치가 제대로되었지만 아래의 cntlm.conf 파일에서 2 개의 변수 자리 표시자를 변경하는 데 어려움을 겪고 있습니다.

# 
# 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 

cnlm.conf 나는 재를 사용하여 PassNTLMv2

  • PassLM
  • PassNT
  • 을 변경 할 수 있었다 'sed'와 함께 줄 바꿈을 사용하지만 bashscript에서 사용되는 변수에서 $ MyUserName 및 $ MyPassWord를 변경할 수 없습니다.

    어떻게 할 수 있습니까?

답변

2

다양한 대안이 있습니다

그들은 "템플릿"에 sed를 사용하여 새 파일을 생성 교체하려면, 당신은 이런 식으로 작업을 수행 할 수 있습니다

sed 's/\$MyPassword/MySuperPassword/' cnlm.conf > cnlm.new.conf 

을 지금, 당신이로 대체 할 경우 암호의 마지막 값을 모르는와 같은 파일, 당신은 할 수 있습니다 :

sed -ri 's/^(Password *).*$/\1MySuperPassword/' cnlm.conf 

를 새 암호는 쉘 변수에 있다면, 당신은 마지막을 실행할 수 있습니다 같은 명령에 사용자 이름과 암호를 변경하려는 경우

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 
+0

신난다, 내 문제를 해결 감사합니다! – Xander