Search code examples
bashpermissionssudouser-permissionssu

How do I use su to execute the rest of the bash script as that user?


I've written a script that takes, as an argument, a string that is a concatenation of a username and a project. The script is supposed to switch (su) to the username, cd to a specific directory based upon the project string.

I basically want to do:

su $USERNAME;  
cd /home/$USERNAME/$PROJECT;  
svn update;  

The problem is that once I do an su... it just waits there. Which makes sense since the flow of execution has passed to switching to the user. Once I exit, then the rest of the things execute but it doesn't work as desired.

I prepended su to the svn command but the command failed (i.e. it didn't update svn in the directory desired).

How do I write a script that allows the user to switch user and invoke svn (among other things)?


Solution

  • The trick is to use "sudo" command instead of "su"

    You may need to add this

    username1 ALL=(username2) NOPASSWD: /path/to/svn
    

    to your /etc/sudoers file

    and change your script to:

    sudo -u username2 -H sh -c "cd /home/$USERNAME/$PROJECT; svn update" 
    

    Where username2 is the user you want to run the SVN command as and username1 is the user running the script.

    If you need multiple users to run this script, use a %groupname instead of the username1