Prev: How to connect to Mysql & Query for Database Tables
Next: Class with Multi Constrcutor ( initialize )
From: Brian Candler on 27 Jan 2010 05:14 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? because your login shell is /bin/bash not /bin/sh (grep for your username in /etc/passwd) The correct solution is not to use bash-specific functionality: `. whatever` should work just fine. By doing this you'll help your script to be portable to other operating systems, like *BSD which tend not to install bash by default because of its restrictive GPL licence. -- Posted via http://www.ruby-forum.com/.
From: Brian Candler on 27 Jan 2010 05:17 Ammar Ali wrote: > source is a built-in shell command, not an executable. It is only > available from within the shell. You are correct, but you've missed the point. As the OP already observed, ruby *does* invoke a shell when you pass it a string in backticks. The point is that his default shell doesn't have a 'source' builtin. `source /dev/null` # fails (not a POSIX shell feature) `. /dev/null` # works -- Posted via http://www.ruby-forum.com/.
From: Phil Romero on 27 Jan 2010 05:18 [Note: parts of this message were removed to make it a legal post.] On Wed, Jan 27, 2010 at 2:04 AM, Ammar Ali <ammarabuali(a)gmail.com> wrote: > 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 > > > Another good tool to use is 'type' when trying to puzzle this stuff out: [pdr(a)grace]$ type source source is a shell builtin [pdr(a)grace]$ type . is a shell builtin
From: Adam Akhtar on 27 Jan 2010 05:21 Many thanks for your replies again - most helpful and greatly appreciated. Saved a few hours of my hitting my head against a brick wall. -- Posted via http://www.ruby-forum.com/.
From: Seebs on 27 Jan 2010 17:56 On 2010-01-27, 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? External shell almost always uses /bin/sh, which is usually more POSIXY, and "source" is a bash-only feature. Try ". $HOME/.bashrc" or something close to that -- the "." command often requires a path to reach things in the current directory, to avoid certain obvious failure modes. -s -- Copyright 2010, all wrongs reversed. Peter Seebach / usenet-nospam(a)seebs.net http://www.seebs.net/log/ <-- lawsuits, religion, and funny pictures http://en.wikipedia.org/wiki/Fair_Game_(Scientology) <-- get educated!
First
|
Prev
|
Pages: 1 2 Prev: How to connect to Mysql & Query for Database Tables Next: Class with Multi Constrcutor ( initialize ) |