Creating alias for Trash

Solution 1:

First of all, you don’t use $ when you call an alias.  $ is for expanding a variable (and a few other things that aren’t particularly relevant to this question).

But, secondly, aliases do work a little like variables, in the sense that they (at the risk of oversimplifying a little) just expand to a bunch of words.  You say you want to do myrm foo, but that would expand to mv /home/user/Trash/* foo, which doesn’t make sense.

A simple solution would be to define the alias to be mv -t /home/user/Trash, which would work because mv supports the

mv -t destination_dir  file
syntax as an alternative to the

mv filedestination_dir
syntax.

But you can get greater flexibility with a shell function.  These combine the flexibility of scripts with the (low) overhead of aliases.  For example,

myrm() { mv "$@" /home/user/Trash; }

will cause myrm foo to be interpreted as mv foo /home/user/Trash.

Solution 2:

Probably easier solution is to use trash-cli package. Then you can just do alias myrm=trash and then trash foo to accomplish what you want to. Except that foo will now go to ~/. local/share/Trash

Solution 3:

The problem is, with mv you have to use it like mv source destination.

With your alias it's vice-versa mv destination source.

Also you don't need the asterisk * at the end, because it works with the destination as a folder. Make sure your folder /home/user/Trash exists with mkdir /home/user/Trash.

To solve your alias idea, I would recommend you to have a look at this stackoverflow questions:

  • https://stackoverflow.com/q/7131670/7311363

This will lead to that solution; please add this to your ~/.bashrc and do a source ~/.bashrc after adding:

myrm() {
 /bin/mv "$@" /home/user/Trash/
}