2009-11-08 6 views
0

J'écris un script bash et je veux passer à un autre utilisateur, cd dans un répertoire spécifié par MYDIR dans les utilisateurs bash_profile et lister le contenu.Changer le contenu des variables d'utilisateur et de sortie

Actuellement, j'ai:

read username 
su - app${username} -c ls $MYDIR 

La sortie est rien, ma première supposition est qu'il est un problème de lecture de MYDIR $ des profil de l'utilisateur comme faisant cela fonctionne manuellement bien par exemple

#su - appadmin 
#ls $MYDIR 

Répondre

1

Vous devez citer la commande à exécuter.

Au moment où le shell remplace $MYDIR avec la valeur de l'environnement de l'appelant. Aussi ne laisse passer que -c la prochaine arg à exécuter, à savoir ls sans $MYDIR - vous avez besoin de mettre des guillemets autour de toute commande à distance:

su - app${username} -c 'ls $MYDIR' 
+0

C'est génial, merci pour l'explication. – AdamW

0

changement $MYDIR à ${MYDIR:?}. Cela provoquera une erreur si MYDIR n'est pas défini. Il est possible que vous n'expédiez pas la variable dans le profil, c'est pourquoi cela fonctionne dans la ligne de commande, mais pas dans le script.

Questions connexes