1

I am using zsh with oh-my-zsh in iTerm on macOS. There are some aliases defined in my .zshrc I use often, like this:

deploy(){
 cd ~/Path/To/My/Project;
 build ...;
 rsync ...;
}

To execute this, I have to switch over to iTerm and run the alias. Now I'd like to be able to do that from anywhere via a hotkey.

I've read that automator is the tool of choice.

I created an action "run shell script" and chose `/bin/zsh/' from the list of available shells.

But running my alias returns zsh:1: command not found.

Am I on the wrong shell? But echo $0 in iTerm gives me -zsh.

How can I run my alias without being in the iTerm window? Any approach will do, Automator is just how I'm trying to accomplish it.

4
  • 1
    Well, that is a function. Normally, you would write the function in a separate file and place it in a directory defined by fpath. In your .zshrc you would autoload the function in order to use it.
    – fd0
    May 26, 2017 at 15:40
  • Oh! And then it would be available in all shells & automator, I guess. Would you say coderwall.com/p/ktv3hq/zsh-autoloading-functions-i which came up after following your hint would be correct?
    – Urs
    May 26, 2017 at 15:54
  • What do you get from echo $SHELL? May 26, 2017 at 16:25
  • echo $SHELL returns /bin/zsh
    – Urs
    May 27, 2017 at 8:54

3 Answers 3

5

The solution is to source the file dependencies you need inside the automator script.

Example if you added all of your scripts to ~/.zshrc

source ~/.zshrc
deploy

You can debug things easier by doing which deploy to check to see if that script is accessible.

3

Automator runs in its own environment and does not read your shell rc files. The PATH is limited to /usr/bin:/bin:/usr/sbin:/sbin. None of the environment is exported for further use. You could define the function in Run Shell Script and run it like this:

 deploy () {
 cd ~/Path/To/My/Project;
 build ...;
 rsync ...;
 }

 deploy

Though this is somewhat limited.

2
  • That sounds reasonable. But I have several functions, e.g. for build and rsync. Can they be "nested" in Run Shell Script?
    – Urs
    May 27, 2017 at 8:56
  • @Urs Function definitions must precede their first call. Assuming that you are doing so in your script, I see no issues.
    – fd0
    May 27, 2017 at 12:48
0

I found a workaround without automator;

On https://apple.stackexchange.com/a/136931/60854 I read about hotkeys in iTerm. I made a hotkey in Keys > Hotkey to call iTerm to the foreground and another one in Profile > Keys > Key Mappings to enter a string deploy\n. Now I press cmd-i cmd-o and here we go.

You must log in to answer this question.

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