2

First of all, I'm totally new in this Linux world. So, please consider this when you read. I got a 10 to 20 lines of bash code which I need to run periodically. Now yesterday, I've been trying to put those lines in a single bash file so that I can just run them in a single command. But I got stuck at a point because the code contains some operations that can only run with a shell login, like 'cd /root' for instance. Now, every time I run them I need to login to a shell using 'sudo -s' after some point. Here is a part of my codes.

cd ~
cp -Rf $worthy_folders /root/
sudo -s
cd /root
sudo chown -R root:root $worthy_folders

Obviously I can not write them in a bash file as they are. That just prompts me for password and need to press several enter. And also the 'sudo cd' doesn't work. So, my question is, there a way to write those commands in a single bash file and just run them?

1 Answer 1

2

You could put the whole thing into a file, say myscript.sh, then run the whole thing with sudo:

$ sudo myscript.sh

that way the sudo happens before any of the script. If that isn't acceptable, then you can have sudo execute a few commands at a time:

$ sudo bash -c "cd /root; chown -R root:root $worthy_folders"

This isn't much different, though, but at least you can have a small subset of commands run with elevated privileges instead of all of the commands.

And just as a tip - yeah, it's annoying to be prompted in the middle of a script for a password, and if there is a possibility of a race condition, can be dangerous. You can have sudo validate you by calling it with the -v flag. This will prompt you for your password if required and reset the timestamp to restart the timeout specified in your sudoers file.

1
  • Thanks @Paul, sudo myscript.sh works!!! Thanks a million!
    – Prativasic
    Commented Oct 7, 2011 at 6:05

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .