Prev: How to connect to Mysql & Query for Database Tables
Next: Class with Multi Constrcutor ( initialize )
From: Adam Akhtar on 27 Jan 2010 04:11 Is it just me or is this something that just cant be done? Ive found out that whenever system calls are made they open a child shell process. And as soon as that call is finished the child shell is closed and any changes that were made to the environment are lost with it. But i should still be able to execute source .bashrc (even though the changes will be lost as soon as that call finishes). Instead I get command not found. How come? (Ubuntu 9.04 and Ruby 1.8x) -- Posted via http://www.ruby-forum.com/.
From: Jesús Gabriel y Galán on 27 Jan 2010 04:23 On Wed, Jan 27, 2010 at 10:11 AM, Adam Akhtar <adamtemporary(a)gmail.com> wrote: > Is it just me or is this something that just cant be done? > > Ive found out that whenever system calls are made they open a child > shell process. And as soon as that call is finished the child shell is > closed and any changes that were made to the environment are lost with > it. > > But i should still be able to execute source .bashrc (even though the > changes will be lost as soon as that call finishes). Instead I get > command not found. How come? > > (Ubuntu 9.04 and Ruby 1.8x) irb(main):004:0> `echo $0` => "sh\n" and sh doesn't have a source command. I remember there was a question recently about changing the shell the backticks use, but I can't remember the answers, maybe you can search for it in the archives? Jesus.
From: Brian Candler on 27 Jan 2010 04:28 Adam Akhtar wrote: > Is it just me or is this something that just cant be done? ... > (Ubuntu 9.04 and Ruby 1.8x) In recent Ubuntu versions, the default shell is dash (/bin/sh is a link to /bin/dash), and 'source' is not a known keyword in that shell. To demonstrate: $ /bin/sh $ source /dev/null /bin/sh: source: not found $ exit The solution: use '.' instead of 'source'. dash is a POSIX-compatible shell without lots of non-standard bash extensions. If you really need to use bash-isms, then you should invoke bash explicitly. >> `/bin/bash -c 'source /dev/null'` => "" >> HTH, Brian. -- Posted via http://www.ruby-forum.com/.
From: Adam Akhtar on 27 Jan 2010 04:38 Thank you very much for both of your replies. I just tried `/bin/bash -c 'source whatever'` and it worked! Fantastic. But i don't understand if source isnt a known command then how come when i go to my command line and type source it works fine? Thats why i was initially confused. It worked manually but not inside a script or in irb. -- Posted via http://www.ruby-forum.com/.
From: Ammar Ali on 27 Jan 2010 05:04 Adam Akhtar wrote: > Thank you very much for both of your replies. I just tried > > `/bin/bash -c 'source whatever'` > > and it worked! Fantastic. > > But i don't understand if source isnt a known command then how come when > i go to my command line and type source it works fine? > > Thats why i was initially confused. It worked manually but not inside a > script or in irb. > > source is a built-in shell command, not an executable. It is only available from within the shell. When you go to your command line, you're in the shell. In a ruby script, or irb, the above works because it runs the bash shell and hands it the commands to run as a string (the -c option). Try running these: $ which bash # /bin/bash $ which source # returns nothing HTH, ammar
|
Next
|
Last
Pages: 1 2 Prev: How to connect to Mysql & Query for Database Tables Next: Class with Multi Constrcutor ( initialize ) |