48

I'm a web developer. When I want to start working, always i'm executing some command on terminal. For example:

sudo service apache2 start
sudo service mysql start
sublime

For speed up this process, I create a .sh file which contain these commands.

Now, when I want to start working, I'm just executing this .sh file and all services (mysql, apache2 etc.) starting.

Is it possible to create a custom command for this? For example if I type sudo start-working to terminal, it will execute these commands

Seth
  • 58,122
Eray
  • 1,820

2 Answers2

73

A common way people handle this is to make a bin directory in their home directory: mkdir ~/bin

Then, you can put your custom scripts in there: mv start-working ~/bin

Make sure your script is executable: chmod +x ~/bin/start-working

Add this to the bottom of your ~/.bashrc file (if you're using bash, which you probably are): export PATH=$PATH:~/bin

Now log back in and out of your terminal and you should be able to simply type start-working, and your script will execute.

Now that your path is setup, any new scripts you drop into your ~/bin you can just type in the name of.

  • 16
    +1, and instead of logging out and in, you can simply run the source ~/.bashrc or . ~/.bashrc commands to apply the changes. – B Faley Sep 02 '12 at 07:35
  • Joe Oppegaard, I find this really useful information as there are completed scripts I have and would like run as a command rather than a script.

    Is there a way to include all subdirectories that you create in ~/bin so that you don't have to include multiple export lines in .bashrc?

    I tried export PATH=$PATH:~/bin/* but that didn't return the desired results.

    – Kevin Wyman Jan 10 '13 at 15:09
  • 2
    The default ~/.profile already adds ~/bin to PATH, so appending it in ~/.bashrc in addition will pointlessly add it twice or more. – geirha May 16 '13 at 19:53
  • It worked without me appending anything to .bashrc, so you may be able to skip that as geriha says – Aaron Flores Mar 06 '15 at 23:56
  • in my experience, when you add new file you have to redo a chmod command, otherwise the permission will be denied – DiaJos Feb 28 '19 at 12:47
  • echo "export PATH=\$PATH:~/bin" >> ~/.bashrc to add the path export. tail -n 10 ~/.bashrc to confirm it worked. – Reed Dec 04 '19 at 02:48
  • mkdir ~/bin; echo "echo \"bin directory created\";date;" >> ~/bin/user_test; chmod -R +x ~/bin; echo "export PATH=\$PATH:~/bin" >> ~/.bashrc; tail -n 10 ~/.bashrc; source ~/.bashrc; user_test; should do all of it. – Reed Dec 04 '19 at 02:49
22

I was looking how to create custom commands and I found this question among others. I think what I was looking for was for aliases so I'll give you the way to do this with an alias.

On your home folder:

nano .bash_aliases

And there you can write down your commands in one line:

alias start-working='sudo service apache2 start; sudo service mysql start; sublime'

After saving the file reconfigure your bashrc

. ~/.bashrc

And check your new alias is loaded

alias

That's it, you can start working now by running

start-working
Seth
  • 58,122
roho
  • 401