Re: how to run a shell command in mathematica?
- To: mathgroup at smc.vnet.net
- Subject: [mg46071] Re: how to run a shell command in mathematica?
- From: "John Jowett" <John.Jowett at cern.ch>
- Date: Thu, 5 Feb 2004 04:02:51 -0500 (EST)
- Organization: CERN
- References: <200402030821.DAA17406@smc.vnet.net> <bvq74q$5jj$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
As I have mentioned in previous posts to this group, execution of command lines in Unix, Linux or Windows is often best done *without* the Run[] function (by the way, I would be interested to know if anyone sees disadvantages of the following). In this case you could try ReadList["!chmod a+x some-file", Record] (note the exclamation mark) which will return the console output as a list of strings, avoiding the need for redirection and temporary files. An equivalent method is Import["!chmod a+x some-file","Lines"] Other options of ReadList or Import allow you to get the output in other forms, depending on what you want to do with it. Simply applying TableForm as in Import["ls -l", "Lines"]//TableForm will display the output in a readable fashion in the notebook interface. Run[] does have its uses for non-console commands. E.g. to launch a new terminal window you need to do Run["xterm&"] and ReadList is not appropriate. As a slightly more complicated example, here are some functions from my personal utilities package that extend Mathematica's system interface by providing functions for dealing with Unix links. I use them for de-activating links prior to, e.g., archiving or copying files with certain programs. Select[FileNames[],UnixLinkQ] will give a list of files that are links and so on. UnixLinkQ::usage:="UnixLinkQ[filename] returns True if a file exists with the \ name filename and is a Unix link."; deUnixLink::usage:="deUnixLink[linkname] if linkname is a Unix link, \ de-activates it, replacing it with a file that can be re-activated by \ reUnixLink and returns the filename. Otherwise returns Null."; reUnixLink::usage:="deUnixLink[linkname] if linkname is a Unix link that has \ been de-activated by deUnixLink then it will be re-activated. Otherwise \ returns Null."; UnixLinkQ[fn_String]:=If[Not[$OperatingSystem\[Equal]"Unix"],False, StringMatchQ[First[Join[ReadList["!ls -l "<>fn,String],{" "}]],"*->*"] ] SetAttributes[UnixLinkQ,Listable] deUnixLink[tlink_String]:=Module[ {llwords=ReadList["!ls -l "<>tlink,Word],newtlink}, If[Length[llwords]\[GreaterEqual]3 && llwords\[LeftDoubleBracket]-3\[RightDoubleBracket]==tlink&& llwords\[LeftDoubleBracket]-2\[RightDoubleBracket]=="->", ReadList["!rm "<>tlink,Record]; newtlink=OpenWrite[tlink]; WriteString[newtlink,"<<deUnixLinked>> "]; Write[newtlink,llwords]; Close[newtlink] ] ]/;UnixLinkQ[tlink] reUnixLink[tlink_String]:=Module[ {llwords= If[Not[UnixLinkQ[tlink]]&& Read[tlink,Word]\[Equal]"<<deUnixLinked>>", Read[tlink,Expression] ]}, If[Length[llwords]\[GreaterEqual]3&& llwords\[LeftDoubleBracket]-3\[RightDoubleBracket]==tlink&& llwords\[LeftDoubleBracket]-2\[RightDoubleBracket]=="->", DeleteFile[tlink]; ReadList[ "!ln -s "<>llwords\[LeftDoubleBracket]-1\[RightDoubleBracket]<>" "<> llwords\[LeftDoubleBracket]-3\[RightDoubleBracket]]; tlink ] ]/;$OperatingSystem\[Equal]"Unix" "Yasvir Tesiram" <tesiramy at omrf.ouhsc.edu> wrote in message news:bvq74q$5jj$1 at smc.vnet.net... > First thing that springs to mind is; > > Run["chmod a+x some-file"] > > A couple of other things spring to mind; > 1. Make sure that SetDirectory has been used prior to Run or specify the > full path to the file. > 2. The command above will return the status code of the operation, 0 for > success. If you get anything else then something went awry. > 3. You can Run["ls -al"] to check the permissions. But note, that you will > not get anything in the Notebook interface. You will need to redirect the > output of "ls -al", i.e. Run["ls -al > tmp.out"] or similar, then read it > into the Mathematica notebook however you please. > > Cheers > Yas > > On Tue, 3 Feb 2004 sunyb at ustc.edu wrote: > > > Hi, > > I want to change some file's mode such as "chmod a+x some-file" in > > mathematica, what should i do? > > > > thx! > > >
- Follow-Ups:
- Re: Re: how to run a shell command in mathematica?
- From: Yasvir Tesiram <yat@omrf.ouhsc.edu>
- Re: Re: how to run a shell command in mathematica?
- References:
- how to run a shell command in mathematica?
- From: sunyb@ustc.edu (newer)
- how to run a shell command in mathematica?