Como preservar a expressão $ {USER} quando o shell script cria um arquivo em que a expressão vs expressão é desejada

1

Aqui está o meu dilema, em um script de shell que eu uso para instalar ou configurar o OpenVPN e / ou apenas os arquivos de configuração do cliente, eu expandi o script para incluir a instalação do Google Authenticator.

O script cria o arquivo pam.d para esse complemento usando echo ...

echo "auth requisite /lib/security/pam_google_authenticator.so secret=/etc/google-auth/${USER} user=openvpn account required  pam_permit.so">> /etc/pam.d/openvpn

Depois que tudo estiver instalado e o arquivo for criado, o arquivo pam.d acima, é claro, será criado com o usuário, em vez da expressão mostrada abaixo

echo "auth requisite /lib/security/pam_google_authenticator.so secret=/etc/google-auth/root user=openvpn account required pam_permit.so">> /etc/pam.d/openvpn

Existe uma maneira de preservar a expressão como ${USER} no arquivo?

Isso resolveria a edição pós-instalação da alteração de secret=/etc/google-auth/root de volta para secret=/etc/google-auth/${USER}

    
por kcurry0210 02.06.2018 / 22:15

1 resposta

1

Como observa o comentário de Kamil, se você quiser incluir o texto literal $ {USER}, você pode usar apóstrofos em vez de aspas.

echo "auth requisite /lib/security/pam_google_authenticator.so secret=/etc/google-auth/${USER} user=openvpn account required  pam_permit.so">> /etc/pam.d/openvpn

fará com que o shell expanda $ {USER}, que pode ser definido como root. (Se isso não for desejado, você pode tentar preservar essa variável com a capacidade env_reset do sudo, ou apenas definir o valor desejado para uma variável personalizada que o sudo não tenderá a sobrescrever.)

Na verdade, você obtém o mesmo efeito sem as aspas.

echo auth requisite /lib/security/pam_google_authenticator.so secret=/etc/google-auth/${USER} user=openvpn account required  pam_permit.so>> /etc/pam.d/openvpn

Outra opção, no entanto, é usar os apóstrofos em vez de onde você tinha aspas, da seguinte maneira:

echo 'auth requisite /lib/security/pam_google_authenticator.so secret=/etc/google-auth/${USER} user=openvpn account required  pam_permit.so'>> /etc/pam.d/openvpn

Outra opção é simplesmente escapar do cifrão.

echo auth requisite /lib/security/pam_google_authenticator.so secret=/etc/google-auth/\${USER} user=openvpn account required pam_permit.so>> /etc/pam.d/openvpn

Essa barra invertida antes do cifrão diz ao shell para tratar apenas o cifrão como um caractere regular, não como o início de um nome de variável.

    
por 02.06.2018 / 23:58