I find myself using a handful of long commands over and over again with slightly different arguments. For example:

rsync -havu --progress --rsh='ssh -l mylogin' some.machine.somewhere:/some/path /some/local/path

I'd like to be able to easily insert that command at my zsh prompt, and then navigate the command line to make the necessary changes to paths, hosts, and logins. I set up a zsh parameter:

FOO="rsync -havu --progress --rsh='ssh -l mylogin' some.machine.somewhere:/some/path /some/local/path"

Then I can expand $FOO at the prompt. However, the expanded command has all its spaces and quotations escaped with backslashes. Is there a way to make zsh not put the escape characters in the expansion?

I know I can search my history for similar commands and then edit those -- I'd still have to type the long thing out once in each new shell though. I'm also open to other ways I could accomplish my purpose... I could write a python script or something but that seems like a lot of overhead for a fairly simple task.

  • try FOO=(rsync -havu --progress --rsh=\'ssh -l mylogin\' some.machine.somewhere:/so\ me/path /some/local/path) Jan 13, 2013 at 2:53
  • Using a function is the right answer. Furthermore, you should probably not need --rsh. It's rare to specify a username explicitly when connecting with ssh. Usually, you would define an alias with the right username in your ~/.ssh/config. See ssh remote server on some port other than 22 without password for an example. Jan 14, 2013 at 0:48

1 Answer 1


I would recommend using a function that takes parameters for the options you commonly change. You can put this in your ZSH config and execute it interactively. Here is an example:

myrsync() {
   rsync -havu --progress --rsh="ssh -l $username" "${srchost}:${srcpath}" "$destpath"

myrsync mylogin some.machine.somewhere /some/path /some/local/path
  • Many thanks for the suggestions, everyone. Giles, I somehow hadn't run across the .ssh/config option; I've set this up and it saves some typing. Thanks for the tip. I will likely create a function as suggested by jordanm and Giles, although one thing I like about using rsync from the prompt is keeping the syntax fresh in my memory for situations where I don't have my own configurations.... harish.venkat's suggestion is appealing but unfortunately did not work for me. Jan 14, 2013 at 23:41

You must log in to answer this question.

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