1 votes

Comment préserver l'expression ${USER} lorsque Shell Shell crée un fichier où l'on souhaite une sortie expression vs expression.

Voici mon dilemme, dans un Shell Shell que j'utilise pour installer ou configurer OpenVPN et/ou juste les fichiers de configuration du client, j'ai étendu le Shell pour inclure l'installation de Google Authenticator.

Le script crée le fichier pam.d pour cet ajout en utilisant 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

Après que tout soit installé, et que le fichier soit créé, le fichier pam.d ci-dessus est bien sûr créé avec l'utilisateur au lieu de l'expression comme indiqué ci-dessous

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-t-il un moyen de conserver l'expression comme ${USER} dans le fichier ?

Cela résoudrait le problème de la modification après l'installation secret=/etc/google-auth/root retour à secret=/etc/google-auth/${USER}

1voto

frooyo Points 658

Comme l'indique le commentaire de Kamil, si vous souhaitez inclure le texte littéral ${USER}, vous pouvez utiliser des apostrophes au lieu des guillemets.

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

fera en sorte que le Shell développe ${USER}, qui pourrait être défini comme root. (Si cela n'est pas souhaité, vous pourriez essayer de préserver cette variable avec la capacité env_reset de sudo, ou simplement définir la valeur souhaitée dans une variable personnalisée que sudo n'aura pas tendance à écraser).

En fait, vous obtenez le même effet sans les guillemets.

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

Une autre option consiste à utiliser des apostrophes à la place des guillemets, comme suit :

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

Une autre option consiste à échapper au signe du dollar.

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

Cette barre oblique inverse avant le signe du dollar indique au Shell de traiter le signe du dollar comme un caractère ordinaire, et non comme le début d'un nom de variable.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X