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

Recommended Answers

All 7 Replies

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.

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

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.

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.

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

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

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

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.