bin/magento command is the entry point to working with Magento 2's command line tasks. Prompted by a couple of recent tweets I thought I quickly write down a couple of tips to speed up working with it.
First up, depending on how your system is configured, you are either able to use
bin/magento directly or you need to type
php -f bin/magento (or even something like
php70 -f bin/magento if you have multiple versions of php running at the same time). This gets rather cumbersome to type out all the time...
Enter command aliases.
You can provide an alias to any command simply by running:
(or whatever else command you need to run - see above).
Now instead of typing out
bin/magento all the time we can just type
m2 followed by whatever task we want to execute, so for example
m2 cache:clear. Read more on aliases for example here to make this permanent by adding this to your ~/.bashrc file.
We can take this a step further as well. The
bin/magento command only works when executed from the root directory of your site. We can switch to this folder as part of the aliased command:
alias m2='cd /var/www && bin/magento'
Now we can type
m2 from anywhere and it will take us to the Magento 2 folder as the first step and then runs the Magento command.
There is one further improvement we can make. It is important to not mix up different levels of permissions as that can break things. To avoid the
bin/magento command being run with a different user to the one owning the file we add an additional safe guard via an if clause:
alias m2='cd /var/www && if [ `whoami` == `stat -c '%U' bin/magento` ]; then bin/magento "$@"; else echo "bin/magento should be run as user `stat -c '%U' bin/magento`";fi'
Next the task arguments after
bin/magento can all be shortened as well. So instead of typing out
bin/magento cache:clean you can just use
bin/magento c:c. You can abbreviate any task like this. However you might come across an error message like:
$:/var/www$ bin/magento i:r [Symfony\Component\Console\Exception\CommandNotFoundException] Command "i:r" is ambiguous (indexer:reindex, indexer:reset).
in the above case we abbreviated too much and the system can't determine if we wanted to use indexer:reindex or indexer:reset. So we need to make sure that it can differentiate between the two by either using
$:/var/www$ bin/magento i:rei or
$:/var/www$ bin/magento i:res.
The alias can be combined with the shortened arguments as well which adds up to quite a few less characters to type:
php -f bin/magento cache:clean m2 c:c
Instead of using abbreviations you can also use command completion instead of typing out every task you can hit [TAB]. Please see the project here.