I'm trying to run multiple commands in the shell from ruby but I can't seem to grasp how I keep the "state" from the previous shell command. For example, how would I perform the following sequence of commands in ruby: 1. cd /dir 2. ls Not counting "ls /dir" that is ;) I've tried using: system "cd /dir" system "ls" ..but it doesn't work. Thanks!
on 2009-01-07 18:14
on 2009-01-07 18:26
Gu stav wrote: > For example, how would I perform the following sequence of commands in > ruby: > > 1. cd /dir > 2. ls system "cd /dir; ls" or: Dir.chdir("/dir") do system "ls" end or even better: puts Dir["/dir/*"] Generally there's no way to have the state from one system command affect another, but you can change the pwd with Dir.chdir and you can change environment variables using ENV. HTH, Sebastian
on 2009-01-07 18:29
Gu stav schrieb: > > I've tried using: > > system "cd /dir" > system "ls" > > ..but it doesn't work. > > Thanks! Ruby provides excellent classes for this called Dir and File (and maybe FileUtils) RDoc can be found at: http://www.ruby-doc.org/core/classes/File.html and http://www.ruby-doc.org/core/classes/Dir.html
on 2009-01-07 20:08
Works great. Thanks a million!
on 2009-01-07 20:11
On Jan 7, 11:14 am, Gu stav <email@example.com> wrote: > > I've tried using: > > system "cd /dir" > system "ls" > > .but it doesn't work. > > Thanks! > -- > Posted viahttp://www.ruby-forum.com/. [dusty@dustylaptop:~] $ pwd /Users/dusty [dusty@dustylaptop:~] $ ls tmp/ test.txt irb(main):003:0> system('pwd; cd tmp; ls') /Users/dusty test.txt => true
on 2009-01-07 20:21
2009/1/7 Gu stav <firstname.lastname@example.org>: > > I've tried using: > > system "cd /dir" > system "ls" two seperate calls do not work because every system-call creates a new shell process. If you do a 'cd' the first shell does the 'cd' and is then terminated. The second system call starts a new shell process, which does not know about the former cd. You can call system("(cd /dir; ls)") The () inside the system call executes all the commands in one shell process. -Thomas
on 2009-01-08 00:20
On 07.01.2009 19:08, dusty wrote: >> Not counting "ls /dir" that is ;) >> Posted viahttp://www.ruby-forum.com/. > => true Here's another way to do it using a here document by having multiple commands on separate lines - much the same way as in a shell script: robert@fussel ~ $ ruby /tmp/x.rb + pwd /cygdrive/c/Dokumente und Einstellungen/robert + cd /tmp + pwd /tmp + ls x.rb robert@fussel ~ $ cat /tmp/x.rb system <<EOC set -x pwd cd /tmp pwd ls EOC robert@fussel ~ $ Cheers robert