1,105,417 Community Members

How to su properly in a shell script

Member Avatar
stharmon
Newbie Poster
8 posts since Nov 2004
Reputation Points: 0 [?]
Q&As Helped to Solve: 0 [?]
Skill Endorsements: 0 [?]
 
0
 

Hello,

I have written a script to automate a software install. I am running the script as root, but need to su to another user to configure and complile the program properly. Whenever I do the shell script su's to the user properly but the scripts stops executing until I exit out of the new shell that su put me into. The following is an example of my script.

echo -e "\033[1m \n\t Installing courier-imap... \033[0m"
sleep 2
cd /var/src
tar -xjf tar/courier-imap-2.2.2.20040207.tar.bz2
cd courier-imap-2.2.2.20040207

# build as vpopmail
chown -R vpopmail:vchkpw ../courier-imap-2.2.2.20040207
su - vpopmail

./configure --with-redhat

I have also tried using the following to stay in the same shell and preserve the environment:
su - -m -p vpopmail

Does anyone have any thought as to how I can successfully SU and keep the script running?

Thanks,

Stephen

Member Avatar
alc6379
Cookie... That's it
2,752 posts since Dec 2003
Reputation Points: 105 [?]
Q&As Helped to Solve: 154 [?]
Skill Endorsements: 4 [?]
Team Colleague
 
0
 

Ever thought about sudo?

It will allow you to execute single commands as a user without having to drop into the shell of that user. You could even run sudo, and point it to another shell script that contains all of the commands you need it to run, so you could make that script stay somewhat compact.

Member Avatar
akku12345
Newbie Poster
1 post since Apr 2009
Reputation Points: 0 [?]
Q&As Helped to Solve: 0 [?]
Skill Endorsements: 0 [?]
 
0
 

Ever thought about sudo?

It will allow you to execute single commands as a user without having to drop into the shell of that user. You could even run sudo, and point it to another shell script that contains all of the commands you need it to run, so you could make that script stay somewhat compact.

Use -t option in ssh

Member Avatar
Fest3er
Posting Whiz in Training
242 posts since Aug 2007
Reputation Points: 39 [?]
Q&As Helped to Solve: 35 [?]
Skill Endorsements: 0 [?]
 
0
 
echo -e "\033[1m \n\t Installing courier-imap... \033[0m"
sleep 2
cd /var/src
tar -xjf tar/courier-imap-2.2.2.20040207.tar.bz2
cd courier-imap-2.2.2.20040207

# build as vpopmail
chown -R vpopmail:vchkpw ../courier-imap-2.2.2.20040207
[B]su - vpopmail[/B]

./configure --with-redhat

... Does anyone have any thought as to how I can successfully SU and keep the script running?

To actually answer your query, you need to feed the commands you want to execute to su(), as in:

su -c "./configure --with-redhat" - vpopmail

You can execute the commands one at a time, or you can put them in another shell script and have su() execute that shell script.

Member Avatar
komalar
Newbie Poster
1 post since Sep 2010
Reputation Points: 0 [?]
Q&As Helped to Solve: 0 [?]
Skill Endorsements: 0 [?]
 
0
 

Is it possible for me to su to different user from within a script, execute few commands in the new shell and stay in the same shell...?

For Ex:

#!/bin/sh
sudo su - user1
echo #HOME
echo `ls -ltr`

This should print the home directory of user1, print the files there and stay in the same shell.

But the script doesn't execute after su to user1.

sudo su - c "echo $HOME" - user1

works but it exits from new shell immediately after printing $HOME value.

Member Avatar
Peter Odéus
Newbie Poster
1 post since Nov 2010
Reputation Points: 0 [?]
Q&As Helped to Solve: 0 [?]
Skill Endorsements: 0 [?]
 
0
 

I am executing the following script like "sudo ./script.sh", so that no authorization is needed when temporarily switching to user "test". The HERE tags delimit the execution in the test user context

#!/bin/sh
echo ~/
su - test <<HERE
echo ~/
ls -al
HERE
echo ~/

:-)

/Peter Odéus

Member Avatar
rehm
Newbie Poster
2 posts since Nov 2010
Reputation Points: 0 [?]
Q&As Helped to Solve: 0 [?]
Skill Endorsements: 0 [?]
 
0
 

hi i need automated routines in bash shell.. i do know how i m start, if you know pls send it to me....

Member Avatar
rehm
Newbie Poster
2 posts since Nov 2010
Reputation Points: 0 [?]
Q&As Helped to Solve: 0 [?]
Skill Endorsements: 0 [?]
 
0
 

hi i need automated routines in bash shell.. i don't know how i m start, if you know pls send it to me....

You
This article has been dead for over three months: Start a new discussion instead
Post:
Start New Discussion
Tags Related to this Article