1

I have a scenario where I have a script that monitors a file location and that file location has files copied to it, i.e. /home/matt/thefile.

I want an alias that if I do place myfile.txt it will overwrite /home/matt/thefile with myfile.txt.

dessert
  • 1,687
NolanPower
  • 113
  • 4
  • 2
    What do you mean by saying “copy it on top” – should thefile be overwritten or the content of myfile.txt attached to its end? – dessert Sep 18 '17 at 19:10
  • It should be overwritten. – NolanPower Sep 18 '17 at 19:14
  • Maybe https://unix.stackexchange.com/q/24952/26493 or https://askubuntu.com/q/622971/108339 helps – Olaf Dietsche Sep 18 '17 at 19:26
  • The monitor script is already running and working. It's just that a lot of people are using it and copying files to the target directory that it would be really useful to have an alias for it. – NolanPower Sep 18 '17 at 19:28

1 Answers1

3

A function would be more appropriate.

In Bourne-like shells:

place() { cp -- "$1" /home/matt/thefile; }

In shells other than bash, yash and posh you can simplify it to:

place() cp -- "$1" /home/matt/thefile

In fish:

function place
  cp -- $argv[1] /home/matt/thefile
end

in rc/es:

fn place {
  cp -- $1 /home/matt/the/file
}

It's in (t)csh that you'd need to use an alias as those shells don't have functions (it's also csh that introduced aliases in the first place). In (t)csh you can use history substitution to allow some kind of argument passing to aliases.

alias place 'cp -- \!:1 /home/matt/the/file'

When called as place myfile.txt, they would copy myfile.txt to ~/thefile

If you wanted something that works regardless of the shell of the user, rather than having them add a shell-specific function/alias to their shell customization file, you'd create a script which you'd add in a directory that is in their command search path. Something like:

#! /bin/sh -
exec cp -- "${1?Please give the file to copy as argument}" /home/matt/thefile