Forums > Beta

shell 2013

August 12, 2013 | 7:26 am

Hi y’all,

Bill Orcutt’s ‘shell’ object has gotten a bit long in the tooth and it was time for a major cleanup and, er, a complete rewrite, actually. An "early beta" is attached to this post, so give ‘er a spin and let me know how it goes.

– complete rewrite :-)
– initial implementation of interactive shell functionality:
  – ‘penter': if an interactive command is running, send the text + a carriage return
  – ‘pwrite': if an interactive command is running, send the text (no CR added)
but it’s still pretty rough ("top -s 1 -l 3600 -stats pid\,cpu\,time\,command" works, but can’t be controlled interactively, for instance. I could successfully SSH to another computer, though).
– infrastructure for a Windows CMD version added (but no, there’s not a Windows version yet and may not be for some time).
– new @stderr to optionally merge stderr with stdout

Known issues:
– not really well-tested yet

  • This topic was modified 1 year by  Jeremy. Reason: updated attachment
August 12, 2013 | 2:43 pm

lekker! Thanks, Jeremy!

August 13, 2013 | 3:03 am

Thanks, thsi is a very useful object. One question though : does that update mean that now you can open an aplication which has no graphical interface ? or a command line application ?

August 13, 2013 | 3:06 am

You’ll need to provide an example. I’m not quite sure what you want to do.

August 13, 2013 | 6:10 am

Well anyway it seems to work, previously i could’nt make it work, but error was probably on my side, related more to bad filepath formatting (need \\ inside " " for each blank space ; \ is not enough) than this update…

August 13, 2013 | 9:09 am

…and what i tried to do is : launching an application which doesn’t have a graphical interface, through [shell]. It should be the same than an application with a graphical interface. That’s why my question could be confusing…

…Regarding the commandline applications, it is another question ; which answer is "yes, you can" using the new penter/pwrite message.

This is awesome ! thanks ! sorry for the confusing/confused questions :)

August 13, 2013 | 9:22 am

An application without a graphical interface is the same as a command line application, as far as I’m concerned. Anyway, yes, it all seems to be working for me. I’ve made a few improvements and updated a new version of the object to the original post:

August 14, 2013 | 3:09 am

it’s an application that opens in a separate process than commandline, which you can’t interact with in console, but has no gui ; you just see its icon in the dock when it’s running. Then maybe it does have a gui, but an empty gui ; and maybe it’s an unwise programming practice !…

August 14, 2013 | 3:31 am

Ah ok, you mean a faceless background application, I guess. The point of the ‘shell’ object is to provide access to the OS shell — so you can launch or kill such an application, you can run an Applescript or similar which targets such an application, but if it doesn’t provide a command line interface, there’s not much you can do with it otherwise.

August 14, 2013 | 6:45 am

Faceless background application, that’s it ;) just launching it at a patcher’s loading is useful in my case.

August 14, 2013 | 9:06 am

Nice work. In the past I’ve handled shell stuff successfully from pyext, will have to give this a look.

August 23, 2013 | 4:11 am

thanks jeremy, you are a legend. this is big news.

especially excited by:

"infrastructure for a Windows CMD version added"

…with that added, there will be world peace.

September 22, 2013 | 11:41 am

Can someone help me out with my message formatting? Neither of these 2 options work for making ImageMagick produce an animated GIF. The bottom one works in Terminal.

I tried removing the space from the paths to no avail.


– Pasted Max Patch, click to expand. –


September 22, 2013 | 6:28 pm

hmmmm, two possibilities…
1/either in the first case you need \ before each blank space
2/or you need to format the filepaths using conformpath. I can’t really do that here since i don’t have imagemagick

eitherway, sending something in hyphens (" ") should not work, you need the \ before each hyphen.


– Pasted Max Patch, click to expand. –


September 22, 2013 | 6:43 pm

(it seems to be something else entirely)

September 23, 2013 | 12:08 pm

hey tanx, I ultimately went the pyext way since I need windows support as well

I had tried the \’s though

September 23, 2013 | 12:09 pm

perhaps this helps:

– Pasted Max Patch, click to expand. –


November 30, 2013 | 2:21 am

Thanks! Great!

If I want AppleScript Editor to run a script, what message do I have to send to the shell object?


December 16, 2013 | 1:27 am

Hahahah ! it toggled the system shell!!

December 16, 2013 | 1:33 am

@ubu, you want "osascript": more info

February 27, 2014 | 11:43 am

Hi All-
I’m having a heck of a time being able to ssh to another computer.
My message into [shell] is as follows:

ssh (username)@(localIP)

It works like a champ in Terminal, but I can’t get it to respond in Max.

I’m an sound/interface guy and I don’t have a ton of experience in terminal, but I’ve searched all over the forums and other sites for answers, and I just can’t seem to find out what I’m doing wrong.


February 27, 2014 | 11:45 pm

Recently I was working with shell and realised that, where commands in Terminal are executed with default arguments, in this case you need to provide them. I understand that’s why, as an example, you can type top in Terminal, but in max that doesn’t work (and top -s 1 -l 3600 -stats pid\,cpu\,time\,command does). The ssh command I don’t (didn’t) know, but I see that typing ssh [Enter] in the Terminal gives all possible arguments. Does this make any sense?

May 21, 2014 | 4:06 pm

I’m investigating making an editor for Composers Desktop Project using shell but I can’t seem to change directory with cd. I’m not a pro with terminal but I expect that when i send cd ~/sounds i should then be able to do ls to see whats in the folder – am I misunderstanding?

  • This reply was modified 11 months by  leafcutter.
May 21, 2014 | 11:52 pm

@leafcutter: it’s true in a real shell, but cd doesn’t seem to work in the shell object (nor does pushd). pwd returns the current working directory, and always returns /
ls -l ~/sounds does work.

May 22, 2014 | 3:47 am

Yes that what I thought I was seeing with the shell object.

In CDP in terminal you would negotiate to your sounds folder, then run something like:

filter fixed 1-2 soundin.wav soundout.wav boost/cut freq

I tried:

filter fixed 1-2 ~/sounds/soundin.wav ~/sounds/soundout.wav boost/cut freq

But it didn’t work, does anyone have a clue as to how I might be able to get it to work?
I would be great to have an editor for the amazing treatments available in CDP.

May 22, 2014 | 5:41 am

Ive managed to find a way of doing it. Write the command as a text file, then set its permissions and then run it. Seems to work.

May 31, 2014 | 1:19 pm

Hi All,

In my user home folder .bash_profile file I’ve added an alias to an applescript like this:
alias spotify="osascript /Users/name/Documents/SpotifyControl.scpt"

In the terminal I now can use the command spotify, but when I try to pass this command to the shell.mxo object I get this as output:
stdout: sh: spotify: command not found

How do I make this shell object aware of the paths and aliases in .bash_profile?

Frans-Jan Wind

May 31, 2014 | 1:25 pm

I’ve got it working
Just pass the scriptname as command like this:
osascript /Users/name/Documents/SpotifyControl.scpt next

June 5, 2014 | 7:15 am

@Jeremy: will there be a 64-bit version? I am more and more forced to go 64-bit (my patches grow too big…;-)

June 5, 2014 | 3:56 pm

have you tried it? i’m pretty sure i used it in a 64bit environment. both versions should be combined in one file for mac externals. O.

June 10, 2014 | 5:20 am

thanks for the update on shell, jeremy !!
i was looking into shell now again, since i want to workaround the sleeping [suspend] external.
but i am not too familiar with all the unix-commands, can anybody think of a way
"getting the current frontmost application" out of shell?
\thx klaus

June 10, 2014 | 7:19 am

You could do this by calling a applescript through osascript
In applescript you can make any application frontmost or query "System Events" to get the current front most

June 12, 2014 | 10:04 am

It is 64-bit, I had a version clash with an old shell object from Jamoma…

August 29, 2014 | 9:03 am

I’ve been using this heavily lately and am getting used to the quirks. Cant figure out stderr argument though. How does it work?

September 7, 2014 | 5:04 pm

Hi folks,

A simplish(?) question. Is there a way to thread the shell object? I’m using it as an interface to text-to-speech on osx so sending commands like this:

‘say "hello world" ‘

That works fine but I’d like to be able to say things in an overlapping fashion. In the terminal I can open several terminal windows and execute the command in one after another causing the speech to overlap. I don’t understand what’s going on in the background with this object so it’s hard to know where to go. I tried using ‘nohup COMMAND &’ to return to the prompt which works in a terminal window but not with this object. Any ideas?

thanks in advance for any pointers

September 7, 2014 | 11:59 pm

Hi Tom,

You could put the shell in a poly~ and treat it like any other polyphonic synth.

January 11, 2015 | 3:33 pm

I am using the shell extension to allow me to run python code I have written to remotely control gear. Each time I open max and the patcher ‘shell’ comes in as jbogus. If I double click the shell.mxo and retype shell in the object it gets updated. I have this external stored in:

/Users/mennis/Documents/Max\ 7/Packages/externs/shell.mxo

My default Folder for device projects is set to:
"main:/Users/mennis/Documents/Max 7/Max for Live Devices"

while my folder for Projects is set to:
"main:/Users/mennis/Documents/Max 7/Projects"

February 4, 2015 | 5:46 pm

I would like to launch a command-line application i installed recently, node.js, but when i send the message (node 2>&1) to [shell], i get a :
sh: node: command not found
However if i try the same thing from the terminal, it works normally. Is there somewhere i should install that command-line application again ?

@Michealian ennis : in the "package" folder, there is a precise folder structure to follow, otherwise it’s bound to be bogus at some point
In this case it should be something like
/Users/mennis/Documents/Max\ 7/Packages/externs/externals/shell.mxo
/Users/mennis/Documents/Max\ 7/Packages/shell/externals/shell.mxo

February 4, 2015 | 8:17 pm

i just solved my problem… Apparently, Max’s shell doesn’t have access to user-installed command line tools, so by entering the full path of the command-line tool instead of just the command line ; [shell] can find it and the problem is solved. In my case it was there :
it’s probably a common place for installed command line tools ?..
There should be a way to simplify this ; but i don’t know it

February 12, 2015 | 7:27 am

Jeremy, thank you a lot for this. For me it brings max to a new level!

Is there anyone who would share a example for a ssh connection. When I send ‘ssh user@Ip’ the terminal waits for a password. When I send the password in a second message -> there is no reaction anymore from the terminal. If anyone has a solution for this, please share!

March 8, 2015 | 3:56 pm

I’m also trying to ssh, I’m prompted for a password, but entering it receives no response at all. Anyone managed to do this?

March 9, 2015 | 11:25 am

in the terminal you need input each letter of the password sequentially ; did you try sending each password character one after the other to shell ? or maybe sending the pass with penter ?

March 9, 2015 | 3:09 pm

I tried entering them sequentially with separate message boxes for each character but that didn’t work. Not sure if I’m using penter right, tried a message box with [password penter] and [password -penter] but didn’t work either.

Viewing 43 posts - 1 through 43 (of 43 total)

Forums > Beta