Ruby on Rails Tuesday, March 8, 2016

On 8 March 2016 at 16:38, nanaya <me@0paste.com> wrote:
> Hi,
>
> On Wed, Mar 9, 2016, at 01:02, Hassan Schroeder wrote:
>> On Tue, Mar 8, 2016 at 7:48 AM, Colin Law <clanlaw@gmail.com> wrote:
>>
>> > Which implies that when I do not specify the path it is using a
>> > different version of echo.
>>
>> It is - google "bash builtin commands" (assuming you're using bash
>> as your default shell).
>>
>
> it's actually more than that:
>
> irb(main):003:0> system "echo -e hello"
> hello
> => true
> irb(main):004:0> system "echo -e 'hello'"
> -e hello
> => true
> irb(main):005:0>
> $ sudo mv /bin/echo /bin/echo.1
> ...
> $ irb
> irb(main):001:0> system "echo -e hello"
> => nil
> irb(main):002:0> system "echo -e 'hello'"
> -e hello
> => true
> irb(main):003:0>
>
> Looks like adding quote to the command string causes it to be executed
> differently.
>
> My guess says that if there's quote in the string at all it is executed
> by spawning a subshell while if there's none it's directly executed
> through execve() or whatever libc function for it.
>
> observe:
>
> irb(main):009:0> system 'bogus command'
> => nil
> irb(main):010:0> system 'bogus "command"'
> sh: 1: bogus: not found
> => false
>
>
> If my quick lookup is correct, it's handled by rb_exec_fillarg function
> in process.c - it decides whether or not to spawn shell or just exec
> immediately (use_shell) by checking the string against various shell
> special keywords and characters.

Thanks for that explanation, that all seems to make sense. Also
running sh in a terminal shows that the sh builtin echo does not
support -e. It can be a liitle confusing that there are three
versions of echo on the system, builtin commands in sh and bash, and
also /bin/echo.

Thanks again

Colin

>
> --
> You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
> To post to this group, send email to rubyonrails-talk@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/1457455127.2747427.543157010.165C4717%40webmail.messagingengine.com.
> For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/CAL%3D0gLt87RCd0j%3DPQ7b_kdH9j0_u_1wb_aYn-1Gdv4F-rTL2Ag%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment