[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

script with -e command line option???

Suresh Unadrad

1/26/2007 9:42:00 PM

If I type in the following example from "Programming Ruby", I get an
error:

$ ruby -n -e "print if /wombat/" *.txt
-e:1: No such file or directory - if (Errno::ENOENT)

This is from a BASH command line on a linux system with ruby 1.8.4

At first I thought it was a problem with BASH interfering with quoting
or something, but I've tried many variations with no luck. Any idea?

thanks,

--su

--
Posted via http://www.ruby-....

8 Answers

WoNáDo

1/26/2007 9:53:00 PM

0

Suresh Unadrad schrieb:
> If I type in the following example from "Programming Ruby", I get an
> error:
>
> $ ruby -n -e "print if /wombat/" *.txt
> -e:1: No such file or directory - if (Errno::ENOENT)
>
> This is from a BASH command line on a linux system with ruby 1.8.4

My answer is from Windows 2000, Ruby 1.8.5, but the reason may be, that there is
no file in your directory which mathes "*.txt"

>>>>> Example from Windows Console >>>>>

C:\Dokumente und Einstellungen\wolfgang\Desktop>type otto.txt
Hello, world!

I'm here to wombat all thinks,
whatever wombat means...
C:\Dokumente und Einstellungen\wolfgang\Desktop>ruby -n -e "print if /wombat/" *.txt
I'm here to wombat all thinks,
whatever wombat means...

>>>>> EoE >>>>>

Wolfgang Nádasi-Donner

Rob Biedenharn

1/26/2007 10:06:00 PM

0


On Jan 26, 2007, at 4:55 PM, Wolfgang Nádasi-Donner wrote:

> Suresh Unadrad schrieb:
>> If I type in the following example from "Programming Ruby", I get an
>> error:
>> $ ruby -n -e "print if /wombat/" *.txt
>> -e:1: No such file or directory - if (Errno::ENOENT)
>> This is from a BASH command line on a linux system with ruby 1.8.4
>
> My answer is from Windows 2000, Ruby 1.8.5, but the reason may be,
> that there is no file in your directory which mathes "*.txt"
>
> >>>>> Example from Windows Console >>>>>
>
> C:\Dokumente und Einstellungen\wolfgang\Desktop>type otto.txt
> Hello, world!
>
> I'm here to wombat all thinks,
> whatever wombat means...
> C:\Dokumente und Einstellungen\wolfgang\Desktop>ruby -n -e "print
> if /wombat/" *.txt
> I'm here to wombat all thinks,
> whatever wombat means...
>
> >>>>> EoE >>>>>
>
> Wolfgang Nádasi-Donner

I suspect Wolfgang is correct. The output that I get is:

$ ruby -n -e "print if /wombat/" *.txt
-e:1: No such file or directory - *.txt (Errno::ENOENT)

Are you copying the exact message? It's odd that it thinks "if" is
the name. When the file exists it appears to do what you probably
expected.

$ ls
README app config doc log script tmp
Rakefile components db lib public test vendor
$ ruby -n -e "print if /wombat/" README*
$ ruby -n -e "print if /Congratulations/" README*
2. Go to http://localhost:3000/ and get "Congratulations, you've put
Ruby on Rails!"
3. Follow the guidelines on the "Congratulations, you've put Ruby on
Rails!" screen

Sorry, I didn't make a new .txt file, but just used what was handy.

-Rob


Rob Biedenharn http://agileconsult...
Rob@AgileConsultingLLC.com




Suresh Unadrad

1/26/2007 10:09:00 PM

0

Wolfgang Nádasi-donner wrote:
> My answer is from Windows 2000, Ruby 1.8.5, but the reason may be, that
> there is
> no file in your directory which mathes "*.txt"

no, that's not my problem. oh - but this reminds me that if i just use
something like "print" for the command line command, then it works fine:

$ ls *.txt
test.txt

$ more test.txt
I wish I had a fish.
I wish I had a wombat.
Fish are tasty.
Wombats are tasty too.

$ ruby -n -e "print if /wombat/" *.txt
-e:1: No such file or directory - if (Errno::ENOENT)

$ ruby -n -e "print if /wombat/" test.txt
-e:1: No such file or directory - if (Errno::ENOENT)

$ ruby -n -e "print" test.txt
I wish I had a fish.
I wish I had a wombat.
Fish are tasty.
Wombats are tasty too.

$ ruby -n -e "print" if test.txt
-e:1: No such file or directory - if (Errno::ENOENT)

so it seems clear that ruby isn't getting the entire -e argument,
probably due to intereference by BASH. anyone know how to fix this?

--su

--
Posted via http://www.ruby-....

Rob Biedenharn

1/26/2007 10:26:00 PM

0


On Jan 26, 2007, at 5:08 PM, Suresh Unadrad wrote:

> $ ruby -n -e "print" if test.txt
> -e:1: No such file or directory - if (Errno::ENOENT)
>
> so it seems clear that ruby isn't getting the entire -e argument,
> probably due to intereference by BASH. anyone know how to fix this?
>
> --su

Well, the first thing to try is changing the kind of quotes.

$ ruby -n -e 'print if /wombat/' test.txt

If that doesn't work, I'd start to suspect that you have "ruby"
defined as an alias or something to make the args be evaluated twice.

-Rob

Rob Biedenharn http://agileconsult...
Rob@AgileConsultingLLC.com



Robert Klemme

1/26/2007 10:33:00 PM

0

On 26.01.2007 23:08, Suresh Unadrad wrote:
> Wolfgang Nádasi-donner wrote:
>> My answer is from Windows 2000, Ruby 1.8.5, but the reason may be, that
>> there is
>> no file in your directory which mathes "*.txt"
>
> no, that's not my problem. oh - but this reminds me that if i just use
> something like "print" for the command line command, then it works fine:
>
> $ ls *.txt
> test.txt
>
> $ more test.txt
> I wish I had a fish.
> I wish I had a wombat.
> Fish are tasty.
> Wombats are tasty too.
>
> $ ruby -n -e "print if /wombat/" *.txt
> -e:1: No such file or directory - if (Errno::ENOENT)
>
> $ ruby -n -e "print if /wombat/" test.txt
> -e:1: No such file or directory - if (Errno::ENOENT)
>
> $ ruby -n -e "print" test.txt
> I wish I had a fish.
> I wish I had a wombat.
> Fish are tasty.
> Wombats are tasty too.
>
> $ ruby -n -e "print" if test.txt
> -e:1: No such file or directory - if (Errno::ENOENT)
>
> so it seems clear that ruby isn't getting the entire -e argument,
> probably due to intereference by BASH. anyone know how to fix this?

This looks like "ruby" was a shell script that does not properly quote
arguments because ruby thinks the first word after "print" is a file
name. Here you can see the effect:

robert@fussel ~
$ ./aa -n -e "print if /wombat/" *.txt
-e:1: No such file or directory - if (Errno::ENOENT)

robert@fussel ~
$ cat aa
#!/bin/sh -f

ruby $*


robert@fussel ~
$

Kind regards

robert




jab3

1/27/2007 4:21:00 PM

0

On Friday 26 January 2007 17:08, Suresh Unadrad <Suresh Unadrad
<sunadrad@yahoo.com>> wrote:
> Wolfgang Nádasi-donner wrote:
> > My answer is from Windows 2000, Ruby 1.8.5, but the reason may be,
> > that there is
> > no file in your directory which mathes "*.txt"
>
> no, that's not my problem. oh - but this reminds me that if i just
> use something like "print" for the command line command, then it
> works fine:
>
> $ ls *.txt
> test.txt
>
> $ more test.txt
> I wish I had a fish.
> I wish I had a wombat.
> Fish are tasty.
> Wombats are tasty too.
>
> $ ruby -n -e "print if /wombat/" *.txt
> -e:1: No such file or directory - if (Errno::ENOENT)
>
> $ ruby -n -e "print if /wombat/" test.txt
> -e:1: No such file or directory - if (Errno::ENOENT)
>

jab3:~% cat > wombat.txt
I wish I had a fish.
I wish I had a wombat.
Fish are tasty.
Wombats are tasty too.
jab3:~% ruby -n -e "print if /wombat/" *.txt
I wish I had a wombat.
jab3:~%

Something is screwy with your setup. Note that it is complaining that
the file 'if' doesn't exist. You could try something like this and see
if it works:

ruby -n -e "$stdout.print if /wombat/" *.txt

Why it thinks that 'if' should be a file I'm not sure about.

-jab3

> $ ruby -n -e "print" test.txt
> I wish I had a fish.
> I wish I had a wombat.
> Fish are tasty.
> Wombats are tasty too.
>
> $ ruby -n -e "print" if test.txt
> -e:1: No such file or directory - if (Errno::ENOENT)
>
> so it seems clear that ruby isn't getting the entire -e argument,
> probably due to intereference by BASH. anyone know how to fix this?
>
> --su

Suresh Unadrad

1/27/2007 7:13:00 PM

0

Robert Klemme wrote:
>This looks like "ruby" was a shell script that does not properly quote
>arguments

Rob Biedenharn wrote:
> I'd start to suspect that you have "ruby"
> defined as an alias or something to make the args be evaluated twice.

Turns out that this was indeed the problem. When I started using the
ruby fltk extensions, I found that I had to replace /usr/bin/ruby with
the following script:

#!/bin/bash

export LD_ASSUME_KERNEL=2.3.98
exec /usr/bin/ruby1.8 $*


so that's why the arguments were being evaluated twice.

thanks everyone for your help!

--su

--
Posted via http://www.ruby-....

Robert Klemme

1/28/2007 10:15:00 AM

0

On 27.01.2007 20:13, Suresh Unadrad wrote:
> Robert Klemme wrote:
>> This looks like "ruby" was a shell script that does not properly quote
>> arguments
>
> Rob Biedenharn wrote:
>> I'd start to suspect that you have "ruby"
>> defined as an alias or something to make the args be evaluated twice.
>
> Turns out that this was indeed the problem. When I started using the
> ruby fltk extensions, I found that I had to replace /usr/bin/ruby with
> the following script:
>
> #!/bin/bash
>
> export LD_ASSUME_KERNEL=2.3.98
> exec /usr/bin/ruby1.8 $*
>
>
> so that's why the arguments were being evaluated twice.
>
> thanks everyone for your help!


You can easily fix that script with this line which will do proper quoting:

exec /usr/bin/ruby1.8 "$@"

Kind regards

robert